125 if (!std::filesystem::exists(filepath)) {
126 LOG_INFO <<
"DIC params file not found: " << filepath <<
", using defaults";
130 std::ifstream file(filepath);
131 if (!file.is_open()) {
132 LOG_WARN <<
"Could not open DIC params file: " << filepath;
136 LOG_INFO <<
"Loading DIC parameters from: " << filepath;
139 while (std::getline(file, line)) {
141 if (line.empty() || line[0] ==
'#')
continue;
144 line.erase(0, line.find_first_not_of(
" \t"));
145 if (line.empty() || line[0] ==
'#')
continue;
151 if (!(value = parseConfigValue(line,
"frictional_conditions")).empty()) {
153 }
else if (!(value = parseConfigValue(line,
"num_pair")).empty()) {
155 }
else if (!(value = parseConfigValue(line,
"mirrored_num_pair")).empty()) {
157 }
else if (!(value = parseConfigValue(line,
"mirrored_cam_order")).empty()) {
159 }
else if (!(value = parseConfigValue(line,
"robot_sample_freq")).empty()) {
161 }
else if (!(value = parseConfigValue(line,
"vid_sample_freq")).empty()) {
165 else if (!(value = parseConfigValue(line,
"base_path")).empty()) {
167 }
else if (!(value = parseConfigValue(line,
"data_path")).empty()) {
169 }
else if (!(value = parseConfigValue(line,
"dic_path")).empty()) {
170 if (!value.empty())
dic_path = value;
173 else if (!(value = parseConfigValue(line,
"im_filter_mode")).empty()) {
175 }
else if (!(value = parseConfigValue(line,
"im_saturation_mode")).empty()) {
177 }
else if (!(value = parseConfigValue(line,
"force_frame_window")).empty()) {
179 }
else if (!(value = parseConfigValue(line,
"automatic_process")).empty()) {
181 }
else if (!(value = parseConfigValue(line,
"parallel_processing")).empty()) {
183 }
else if (!(value = parseConfigValue(line,
"debug_mode")).empty()) {
185 }
else if (!(value = parseConfigValue(line,
"log_level")).empty()) {
187 }
else if (!(value = parseConfigValue(line,
"log_file")).empty()) {
191 else if (!(value = parseConfigValue(line,
"subject_id")).empty()) {
193 }
else if (!(value = parseConfigValue(line,
"phase_id")).empty()) {
195 }
else if (!(value = parseConfigValue(line,
"material_id")).empty()) {
197 }
else if (!(value = parseConfigValue(line,
"nfcond_set")).empty()) {
199 }
else if (!(value = parseConfigValue(line,
"spddxlcond_set")).empty()) {
201 }
else if (!(value = parseConfigValue(line,
"calib_folder_set")).empty()) {
203 }
else if (!(value = parseConfigValue(line,
"ref_trial_id")).empty()) {
207 else if (!(value = parseConfigValue(line,
"idx_frame_start")).empty()) {
209 }
else if (!(value = parseConfigValue(line,
"idx_frame_end")).empty()) {
211 }
else if (!(value = parseConfigValue(line,
"frame_jump")).empty()) {
215 else if (!(value = parseConfigValue(line,
"units_per_pixel")).empty()) {
217 }
else if (!(value = parseConfigValue(line,
"subregion_radius")).empty()) {
221 else if (!(value = parseConfigValue(line,
"limit_grayscale")).empty()) {
225 else if (!(value = parseConfigValue(line,
"fileversion")).empty()) {
227 }
else if (!(value = parseConfigValue(line,
"data_format")).empty()) {
231 else if (!(value = parseConfigValue(line,
"step_d_analysis_type")).empty()) {
233 }
else if (!(value = parseConfigValue(line,
"step_d_radius")).empty()) {
235 }
else if (!(value = parseConfigValue(line,
"step_d_spacing")).empty()) {
237 }
else if (!(value = parseConfigValue(line,
"step_d_cutoff_diffnorm")).empty()) {
239 }
else if (!(value = parseConfigValue(line,
"step_d_cutoff_iteration")).empty()) {
241 }
else if (!(value = parseConfigValue(line,
"step_d_total_threads")).empty()) {
243 }
else if (!(value = parseConfigValue(line,
"step_d_high_strain_enabled")).empty()) {
245 }
else if (!(value = parseConfigValue(line,
"step_d_seed_type")).empty()) {
247 }
else if (!(value = parseConfigValue(line,
"step_d_auto_update")).empty()) {
249 }
else if (!(value = parseConfigValue(line,
"step_d_step_ref_change")).empty()) {
251 }
else if (!(value = parseConfigValue(line,
"step_d_initial_seed")).empty()) {
255 else if (!(value = parseConfigValue(line,
"step_e_analysis_type")).empty()) {
257 }
else if (!(value = parseConfigValue(line,
"step_e_radius")).empty()) {
259 }
else if (!(value = parseConfigValue(line,
"step_e_spacing")).empty()) {
261 }
else if (!(value = parseConfigValue(line,
"step_e_cutoff_diffnorm")).empty()) {
263 }
else if (!(value = parseConfigValue(line,
"step_e_cutoff_iteration")).empty()) {
265 }
else if (!(value = parseConfigValue(line,
"step_e_total_threads")).empty()) {
267 }
else if (!(value = parseConfigValue(line,
"step_e_high_strain_enabled")).empty()) {
269 }
else if (!(value = parseConfigValue(line,
"step_e_seed_type")).empty()) {
271 }
else if (!(value = parseConfigValue(line,
"step_e_auto_update")).empty()) {
273 }
else if (!(value = parseConfigValue(line,
"step_e_step_ref_change")).empty()) {
275 }
else if (!(value = parseConfigValue(line,
"step_e_initial_seed")).empty()) {
279 else if (!(value = parseConfigValue(line,
"step_f_analysis_type")).empty()) {
281 }
else if (!(value = parseConfigValue(line,
"step_f_radius")).empty()) {
283 }
else if (!(value = parseConfigValue(line,
"step_f_spacing")).empty()) {
285 }
else if (!(value = parseConfigValue(line,
"step_f_cutoff_diffnorm")).empty()) {
287 }
else if (!(value = parseConfigValue(line,
"step_f_cutoff_iteration")).empty()) {
289 }
else if (!(value = parseConfigValue(line,
"step_f_total_threads")).empty()) {
291 }
else if (!(value = parseConfigValue(line,
"step_f_high_strain_enabled")).empty()) {
293 }
else if (!(value = parseConfigValue(line,
"step_f_seed_type")).empty()) {
295 }
else if (!(value = parseConfigValue(line,
"step_f_auto_update")).empty()) {
297 }
else if (!(value = parseConfigValue(line,
"step_f_step_ref_change")).empty()) {
299 }
else if (!(value = parseConfigValue(line,
"step_f_initial_seed")).empty()) {
303 else if (!(value = parseConfigValue(line,
"step_e_ray_bvh")).empty()) {
305 }
else if (!(value = parseConfigValue(line,
"step_e_stitch_mode")).empty()) {
306 std::string m = value; std::transform(m.begin(), m.end(), m.begin(), ::tolower);
309 }
else if (!(value = parseConfigValue(line,
"step_e_distortion_removal")).empty()) {
311 }
else if (!(value = parseConfigValue(line,
"step_d_replacebadcorr")).empty()) {
315 else if (!(value = parseConfigValue(line,
"camera_pairs")).empty()) {
318 std::istringstream pairs_stream(value);
319 std::string pair_str;
320 while (std::getline(pairs_stream, pair_str,
';')) {
321 auto comma_pos = pair_str.find(
',');
322 if (comma_pos != std::string::npos) {
323 int c1 = std::stoi(pair_str.substr(0, comma_pos));
324 int c2 = std::stoi(pair_str.substr(comma_pos + 1));
330 else if (!(value = parseConfigValue(line,
"step_f_temporal_filtering")).empty()) {
332 }
else if (!(value = parseConfigValue(line,
"step_f_freq_filt")).empty()) {
334 }
else if (!(value = parseConfigValue(line,
"step_f_compute_rbm")).empty()) {
340 LOG_INFO <<
"DIC parameters loaded from file";
346 if (!std::filesystem::exists(filepath)) {
347 LOG_INFO <<
"NCorr params file not found: " << filepath <<
", skipping";
351 std::ifstream file(filepath);
352 if (!file.is_open()) {
353 LOG_WARN <<
"Could not open NCorr params file: " << filepath;
357 LOG_INFO <<
"Loading NCorr parameters from: " << filepath;
360 while (std::getline(file, line)) {
362 if (line.empty() || line[0] ==
'#')
continue;
364 line.erase(0, line.find_first_not_of(
" \t"));
365 if (line.empty() || line[0] ==
'#')
continue;
369 if (!(value = parseConfigValue(line,
"units_per_pixel")).empty()) {
371 }
else if (!(value = parseConfigValue(line,
"radius")).empty()) {
373 }
else if (!(value = parseConfigValue(line,
"debug")).empty()) {
375 }
else if (!(value = parseConfigValue(line,
"threads")).empty()) {
377 }
else if (!(value = parseConfigValue(line,
"maxCorrCoeff")).empty()) {
379 }
else if (!(value = parseConfigValue(line,
"scalefactor")).empty()) {
381 }
else if (!(value = parseConfigValue(line,
"interp")).empty()) {
383 }
else if (!(value = parseConfigValue(line,
"subregion")).empty()) {
385 }
else if (!(value = parseConfigValue(line,
"dic_config")).empty()) {
387 }
else if (!(value = parseConfigValue(line,
"cutoff_corrcoef")).empty()) {
389 }
else if (!(value = parseConfigValue(line,
"roi_update_mode")).empty()) {
391 }
else if (!(value = parseConfigValue(line,
"accumulation_mode")).empty()) {
393 }
else if (!(value = parseConfigValue(line,
"save_disps_steps")).empty()) {
395 }
else if (!(value = parseConfigValue(line,
"perspective_interp")).empty()) {
397 }
else if (!(value = parseConfigValue(line,
"units")).empty()) {
399 }
else if (!(value = parseConfigValue(line,
"seeds_are_optimized")).empty()) {
401 }
else if (!(value = parseConfigValue(line,
"cutoff_max_diffnorm")).empty()) {
403 }
else if (!(value = parseConfigValue(line,
"cutoff_max_corrcoef")).empty()) {
405 }
else if (!(value = parseConfigValue(line,
"matching_cutoff_max_corrcoef")).empty()) {
407 }
else if (!(value = parseConfigValue(line,
"use_exact_matlab")).empty()) {
409 }
else if (!(value = parseConfigValue(line,
"no_update")).empty()) {
411 }
else if (!(value = parseConfigValue(line,
"fixed_step_ref")).empty()) {
413 }
else if (!(value = parseConfigValue(line,
"dic_engine")).empty()) {
415 }
else if (!(value = parseConfigValue(line,
"cuncorr_seed_search")).empty()) {
421 LOG_INFO <<
"NCorr parameters loaded from file";
427 if (!std::filesystem::exists(filepath)) {
428 LOG_INFO <<
"Visualization params file not found: " << filepath <<
", using defaults";
432 std::ifstream file(filepath);
433 if (!file.is_open()) {
434 LOG_WARN <<
"Could not open visualization params file: " << filepath;
438 LOG_INFO <<
"Loading visualization parameters from: " << filepath;
441 while (std::getline(file, line)) {
443 if (line.empty() || line[0] ==
'#')
continue;
445 line.erase(0, line.find_first_not_of(
" \t"));
446 if (line.empty() || line[0] ==
'#')
continue;
451 if (!(value = parseConfigValue(line,
"showvisu")).empty()) {
453 }
else if (!(value = parseConfigValue(line,
"mapLogic")).empty()) {
455 }
else if (!(value = parseConfigValue(line,
"plotopt")).empty()) {
456 plotopt = parseStringList(value);
457 }
else if (!(value = parseConfigValue(line,
"deftype")).empty()) {
459 }
else if (!(value = parseConfigValue(line,
"viewplot")).empty()) {
461 }
else if (!(value = parseConfigValue(line,
"contactAreaLogic")).empty()) {
463 }
else if (!(value = parseConfigValue(line,
"gapLogic")).empty()) {
465 }
else if (!(value = parseConfigValue(line,
"maxCorrCoeff")).empty()) {
467 }
else if (!(value = parseConfigValue(line,
"format")).empty()) {
471 else if (!(value = parseConfigValue(line,
"smoothTimeLogic")).empty()) {
473 }
else if (!(value = parseConfigValue(line,
"filterFreq")).empty()) {
475 }
else if (!(value = parseConfigValue(line,
"smoothSpaceLogic")).empty()) {
477 }
else if (!(value = parseConfigValue(line,
"smoothPar_n")).empty()) {
479 }
else if (!(value = parseConfigValue(line,
"smoothPar_sigma")).empty()) {
483 else if (!(value = parseConfigValue(line,
"showRobotLogic")).empty()) {
485 }
else if (!(value = parseConfigValue(line,
"showImgLogic")).empty()) {
487 }
else if (!(value = parseConfigValue(line,
"camNbr")).empty()) {
488 camNbr = std::stoi(value);
489 }
else if (!(value = parseConfigValue(line,
"tracesLogic")).empty()) {
493 else if (!(value = parseConfigValue(line,
"FaceAlpha")).empty()) {
495 }
else if (!(value = parseConfigValue(line,
"lineColor")).empty()) {
497 }
else if (!(value = parseConfigValue(line,
"quiverScaleFactor")).empty()) {
501 else if (!(value = parseConfigValue(line,
"export_format")).empty()) {
503 }
else if (!(value = parseConfigValue(line,
"export_each_frame")).empty()) {
505 }
else if (!(value = parseConfigValue(line,
"export_frame_list")).empty()) {
509 else if (!(value = parseConfigValue(line,
"vtk_format")).empty()) {
511 }
else if (!(value = parseConfigValue(line,
"vtk_include_scalars")).empty()) {
513 }
else if (!(value = parseConfigValue(line,
"vtk_include_vectors")).empty()) {
517 else if (!(value = parseConfigValue(line,
"ply_format")).empty()) {
519 }
else if (!(value = parseConfigValue(line,
"ply_include_colors")).empty()) {
523 else if (!(value = parseConfigValue(line,
"csv_delimiter")).empty()) {
525 }
else if (!(value = parseConfigValue(line,
"csv_include_header")).empty()) {
529 else if (!(value = parseConfigValue(line,
"generate_videos")).empty()) {
531 }
else if (!(value = parseConfigValue(line,
"video_fps")).empty()) {
533 }
else if (!(value = parseConfigValue(line,
"video_codec")).empty()) {
535 }
else if (!(value = parseConfigValue(line,
"video_quality")).empty()) {
539 std::string q = value;
540 std::transform(q.begin(), q.end(), q.begin(), ::tolower);
541 if (q ==
"high" || q ==
"best") {
543 }
else if (q ==
"medium" || q ==
"normal") {
545 }
else if (q ==
"low") {
550 }
catch (
const std::exception&) {
554 }
else if (!(value = parseConfigValue(line,
"video_alpha")).empty()) {
558 else if (!(value = parseConfigValue(line,
"colormap")).empty()) {
560 }
else if (!(value = parseConfigValue(line,
"colormap_range_mode")).empty()) {
562 }
else if (!(value = parseConfigValue(line,
"colormap_min")).empty()) {
564 }
else if (!(value = parseConfigValue(line,
"colormap_max")).empty()) {
566 }
else if (!(value = parseConfigValue(line,
"colormap_levels")).empty()) {
570 else if (!(value = parseConfigValue(line,
"generate_summary_stats")).empty()) {
572 }
else if (!(value = parseConfigValue(line,
"stats_format")).empty()) {
574 }
else if (!(value = parseConfigValue(line,
"stats_per_frame")).empty()) {
576 }
else if (!(value = parseConfigValue(line,
"stats_spatial")).empty()) {
578 }
else if (!(value = parseConfigValue(line,
"stats_temporal")).empty()) {
582 else if (!(value = parseConfigValue(line,
"mesh_decimation")).empty()) {
584 }
else if (!(value = parseConfigValue(line,
"mesh_smoothing")).empty()) {
586 }
else if (!(value = parseConfigValue(line,
"mesh_smoothing_iterations")).empty()) {
588 }
else if (!(value = parseConfigValue(line,
"show_axes")).empty()) {
590 }
else if (!(value = parseConfigValue(line,
"show_colorbar")).empty()) {
592 }
else if (!(value = parseConfigValue(line,
"show_grid")).empty()) {
594 }
else if (!(value = parseConfigValue(line,
"background_color")).empty()) {
600 LOG_INFO <<
"Visualization parameters loaded from file";