• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

paulmthompson / WhiskerToolbox / 18117112849

30 Sep 2025 02:44AM UTC coverage: 70.161% (+0.03%) from 70.132%
18117112849

push

github

paulmthompson
hungarian algorithm is actually used

60 of 77 new or added lines in 2 files covered. (77.92%)

352 existing lines in 12 files now uncovered.

45125 of 64316 relevant lines covered (70.16%)

1116.85 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.66
/src/DataManager/transforms/ParameterFactory.cpp
1
#include "ParameterFactory.hpp"
2

3
#include "AnalogTimeSeries/AnalogFilter/analog_filter.hpp"
4
#include "AnalogTimeSeries/AnalogHilbertPhase/analog_hilbert_phase.hpp"
5
#include "AnalogTimeSeries/Analog_Event_Threshold/analog_event_threshold.hpp"
6
#include "AnalogTimeSeries/Analog_Interval_Threshold/analog_interval_threshold.hpp"
7
#include "AnalogTimeSeries/Analog_Scaling/analog_scaling.hpp"
8
#include "DigitalIntervalSeries/Digital_Interval_Group/digital_interval_group.hpp"
9
#include "Lines/Line_Alignment/line_alignment.hpp"
10
#include "Lines/Line_Angle/line_angle.hpp"
11
#include "Lines/Line_Clip/line_clip.hpp"
12
#include "Lines/Line_Curvature/line_curvature.hpp"
13
#include "Lines/Line_Min_Point_Dist/line_min_point_dist.hpp"
14
#include "Lines/Line_Point_Extraction/line_point_extraction.hpp"
15
#include "Lines/Line_Resample/line_resample.hpp"
16
#include "Lines/Line_Subsegment/line_subsegment.hpp"
17
#include "Masks/Mask_Connected_Component/mask_connected_component.hpp"
18
#include "Masks/Mask_Median_Filter/mask_median_filter.hpp"
19
#include "Masks/Mask_Principal_Axis/mask_principal_axis.hpp"
20
#include "Masks/Mask_To_Line/mask_to_line.hpp"
21
#include "Media/whisker_tracing.hpp"
22
#include "Lines/Line_Proximity_Grouping/line_proximity_grouping.hpp"
23
#include "Lines/Line_Kalman_Grouping/line_kalman_grouping.hpp"
24

25
#include <iostream>
26

27
void ParameterFactory::registerParameterSetter(std::string const & transform_name,
8,084✔
28
                                               std::string const & param_name,
29
                                               ParameterSetter setter) {
30
    setters_[transform_name][param_name] = std::move(setter);
8,084✔
31
}
8,084✔
32

33
bool ParameterFactory::setParameter(std::string const & transform_name,
283✔
34
                                    TransformParametersBase * param_obj,
35
                                    std::string const & param_name,
36
                                    nlohmann::json const & json_value,
37
                                    DataManager * data_manager) {
38
    auto transform_it = setters_.find(transform_name);
283✔
39
    if (transform_it == setters_.end()) {
283✔
UNCOV
40
        std::cerr << "No parameter setters registered for transform: " << transform_name << std::endl;
×
UNCOV
41
        return false;
×
42
    }
43

44
    auto param_it = transform_it->second.find(param_name);
283✔
45
    if (param_it == transform_it->second.end()) {
283✔
46
        std::cerr << "No setter registered for parameter '" << param_name
UNCOV
47
                  << "' in transform '" << transform_name << "'" << std::endl;
×
UNCOV
48
        return false;
×
49
    }
50

51
    return param_it->second(param_obj, json_value, data_manager);
283✔
52
}
53

54
ParameterFactory & ParameterFactory::getInstance() {
318✔
55
    static ParameterFactory instance;
318✔
56
    return instance;
318✔
57
}
58

59
void ParameterFactory::initializeDefaultSetters() {
86✔
60

61
    // ==================================================
62
    // =============== Analog Time Series ===============
63
    // ==================================================
64

65
    // =============== Threshold Event Detection ===============
66

67
    registerBasicParameter<ThresholdParams, double>(
430✔
68
            "Threshold Event Detection", "threshold_value", &ThresholdParams::thresholdValue);
69

70
    std::unordered_map<std::string, ThresholdParams::ThresholdDirection> event_direction_map = {
86✔
71
            {"Positive (Rising)", ThresholdParams::ThresholdDirection::POSITIVE},
86✔
72
            {"Negative (Falling)", ThresholdParams::ThresholdDirection::NEGATIVE},
86✔
73
            {"Absolute (Magnitude)", ThresholdParams::ThresholdDirection::ABSOLUTE}};
688✔
74

75
    registerEnumParameter<ThresholdParams, ThresholdParams::ThresholdDirection>(
430✔
76
            "Threshold Event Detection", "direction", &ThresholdParams::direction, event_direction_map);
77

78
    registerBasicParameter<ThresholdParams, double>(
430✔
79
            "Threshold Event Detection", "lockout_time", &ThresholdParams::lockoutTime);
80

81
    // ============== Analog Interval Threshold ==============
82

83
    std::unordered_map<std::string, IntervalThresholdParams::ThresholdDirection> threshold_direction_map = {
86✔
84
            {"Positive (Rising)", IntervalThresholdParams::ThresholdDirection::POSITIVE},
86✔
85
            {"Negative (Falling)", IntervalThresholdParams::ThresholdDirection::NEGATIVE},
86✔
86
            {"Absolute (Magnitude)", IntervalThresholdParams::ThresholdDirection::ABSOLUTE}};
688✔
87

88
    registerEnumParameter<IntervalThresholdParams, IntervalThresholdParams::ThresholdDirection>(
430✔
89
            "Threshold Interval Detection", "direction", &IntervalThresholdParams::direction, threshold_direction_map);
90

91
    registerBasicParameter<IntervalThresholdParams, double>(
430✔
92
            "Threshold Interval Detection", "lockout_time", &IntervalThresholdParams::lockoutTime);
93

94
    registerBasicParameter<IntervalThresholdParams, double>(
430✔
95
            "Threshold Interval Detection", "min_duration", &IntervalThresholdParams::minDuration);
96

97
    registerBasicParameter<IntervalThresholdParams, double>(
430✔
98
            "Threshold Interval Detection", "threshold_value", &IntervalThresholdParams::thresholdValue);
99

100
    std::unordered_map<std::string, IntervalThresholdParams::MissingDataMode> missing_data_mode_map = {
86✔
101
            {"Zero", IntervalThresholdParams::MissingDataMode::TREAT_AS_ZERO},
86✔
102
            {"Ignore", IntervalThresholdParams::MissingDataMode::IGNORE}};
602✔
103
    registerEnumParameter<IntervalThresholdParams, IntervalThresholdParams::MissingDataMode>(
430✔
104
            "Threshold Interval Detection", "missing_data_mode", &IntervalThresholdParams::missingDataMode, missing_data_mode_map);
105

106

107
    // ================ Analog Filter ================
108

109
    // Register Analog Filter parameters
110
    std::unordered_map<std::string, AnalogFilterParams::FilterType> filter_type_map = {
86✔
111
            {"lowpass", AnalogFilterParams::FilterType::Lowpass},
86✔
112
            {"highpass", AnalogFilterParams::FilterType::Highpass},
86✔
113
            {"bandpass", AnalogFilterParams::FilterType::Bandpass},
86✔
114
            {"bandstop", AnalogFilterParams::FilterType::Bandstop}};
774✔
115
    registerEnumParameter<AnalogFilterParams, AnalogFilterParams::FilterType>(
430✔
116
            "Analog Filter", "filter_type", &AnalogFilterParams::filter_type, filter_type_map);
117

118
    registerBasicParameter<AnalogFilterParams, double>(
430✔
119
            "Analog Filter", "cutoff_frequency", &AnalogFilterParams::cutoff_frequency);
120

121
    registerBasicParameter<AnalogFilterParams, double>(
430✔
122
            "Analog Filter", "cutoff_frequency2", &AnalogFilterParams::cutoff_frequency2);
123

124
    registerBasicParameter<AnalogFilterParams, int>(
430✔
125
            "Analog Filter", "order", &AnalogFilterParams::order);
126

127
    registerBasicParameter<AnalogFilterParams, double>(
430✔
128
            "Analog Filter", "ripple", &AnalogFilterParams::ripple);
129

130
    registerBasicParameter<AnalogFilterParams, bool>(
430✔
131
            "Analog Filter", "zero_phase", &AnalogFilterParams::zero_phase);
132

133
    registerBasicParameter<AnalogFilterParams, double>(
430✔
134
            "Analog Filter", "sampling_rate", &AnalogFilterParams::sampling_rate);
135

136
    // ================== Analog Hilbert Phase ==================
137

138
    registerBasicParameter<HilbertPhaseParams, double>(
430✔
139
            "Hilbert Phase", "low_frequency", &HilbertPhaseParams::lowFrequency);
140
    registerBasicParameter<HilbertPhaseParams, double>(
430✔
141
            "Hilbert Phase", "high_frequency", &HilbertPhaseParams::highFrequency);
142
    registerBasicParameter<HilbertPhaseParams, size_t>(
430✔
143
            "Hilbert Phase", "discontinuity_threshold", &HilbertPhaseParams::discontinuityThreshold);
144

145
    // ================== Analog Scaling ==================
146

147
    std::unordered_map<std::string, ScalingMethod> scaling_method_map = {
86✔
148
            {"FixedGain", ScalingMethod::FixedGain},                // Multiply by constant factor
86✔
149
            {"ZScore", ScalingMethod::ZScore},                      // (x - mean) / std
86✔
150
            {"StandardDeviation", ScalingMethod::StandardDeviation},// Scale so X std devs = 1.0
86✔
151
            {"MinMax", ScalingMethod::MinMax},                      // Scale to [0, 1] range
86✔
152
            {"RobustScaling", ScalingMethod::RobustScaling},        // (x - median) / IQR
86✔
153
            {"UnitVariance", ScalingMethod::UnitVariance},          // Scale to unit variance (std = 1)
86✔
154
            {"Centering", ScalingMethod::Centering}                 // Subtract mean (center around 0)
86✔
155
    };
1,032✔
156
    registerEnumParameter<AnalogScalingParams, ScalingMethod>(
430✔
157
            "Scale and Normalize", "method", &AnalogScalingParams::method, scaling_method_map);
158

159
    registerBasicParameter<AnalogScalingParams, double>(
430✔
160
            "Scale and Normalize", "gain_factor", &AnalogScalingParams::gain_factor);
161

162
    registerBasicParameter<AnalogScalingParams, double>(
430✔
163
            "Scale and Normalize", "std_dev_target", &AnalogScalingParams::std_dev_target);
164

165
    registerBasicParameter<AnalogScalingParams, double>(
430✔
166
            "Scale and Normalize", "min_target", &AnalogScalingParams::min_target);
167

168
    registerBasicParameter<AnalogScalingParams, double>(
430✔
169
            "Scale and Normalize", "max_target", &AnalogScalingParams::max_target);
170

171
    registerBasicParameter<AnalogScalingParams, double>(
430✔
172
            "Scale and Normalize", "quantile_low", &AnalogScalingParams::quantile_low);
173

174
    registerBasicParameter<AnalogScalingParams, double>(
430✔
175
            "Scale and Normalize", "quantile_high", &AnalogScalingParams::quantile_high);
176

177
    // ====================================================
178
    // ============== Digital Interval Series =============
179
    // ====================================================
180

181
    // ================= Digital Interval Group ===============
182

183
    registerBasicParameter<GroupParams, double>(
430✔
184
            "Group Intervals", "max_spacing", &GroupParams::maxSpacing);
185

186
    // ====================================================
187
    // ============== Line Series ==================
188
    // ====================================================
189

190
    // ================= Line Alignment ===============
191

192
    registerDataParameter<LineAlignmentParameters, MediaData>(
430✔
193
            "Line Alignment to Bright Features", "media_data", &LineAlignmentParameters::media_data);
194

195
    registerBasicParameter<LineAlignmentParameters, int>(
430✔
196
            "Line Alignment to Bright Features", "width", &LineAlignmentParameters::width);
197

198
    registerBasicParameter<LineAlignmentParameters, int>(
430✔
199
            "Line Alignment to Bright Features", "perpendicular_range", &LineAlignmentParameters::perpendicular_range);
200

201
    registerBasicParameter<LineAlignmentParameters, bool>(
430✔
202
            "Line Alignment to Bright Features", "use_processed_data", &LineAlignmentParameters::use_processed_data);
203

204
    std::unordered_map<std::string, FWHMApproach> fwhm_approach_map = {
86✔
205
            {"PEAK_WIDTH_HALF_MAX", FWHMApproach::PEAK_WIDTH_HALF_MAX},
86✔
206
            {"GAUSSIAN_FIT", FWHMApproach::GAUSSIAN_FIT},
86✔
207
            {"THRESHOLD_BASED", FWHMApproach::THRESHOLD_BASED}};
688✔
208
    registerEnumParameter<LineAlignmentParameters, FWHMApproach>(
430✔
209
            "Line Alignment to Bright Features", "approach", &LineAlignmentParameters::approach, fwhm_approach_map);
210

211
    std::unordered_map<std::string, LineAlignmentOutputMode> line_alignment_output_mode_map = {
86✔
212
            {"ALIGNED_VERTICES", LineAlignmentOutputMode::ALIGNED_VERTICES},
86✔
213
            {"FWHM_PROFILE_EXTENTS", LineAlignmentOutputMode::FWHM_PROFILE_EXTENTS}};
602✔
214
    registerEnumParameter<LineAlignmentParameters, LineAlignmentOutputMode>(
430✔
215
            "Line Alignment to Bright Features", "output_mode", &LineAlignmentParameters::output_mode, line_alignment_output_mode_map);
216

217

218
    // ==================== Line Angle ===============
219

220
    registerBasicParameter<LineAngleParameters, float>(
430✔
221
            "Calculate Line Angle", "position", &LineAngleParameters::position);
222

223
    std::unordered_map<std::string, AngleCalculationMethod> angle_calculation_method_map = {
86✔
224
            {"Direct Points", AngleCalculationMethod::DirectPoints},
86✔
225
            {"Polynomial Fit", AngleCalculationMethod::PolynomialFit}};
602✔
226

227
    registerEnumParameter<LineAngleParameters, AngleCalculationMethod>(
430✔
228
            "Calculate Line Angle", "method", &LineAngleParameters::method, angle_calculation_method_map);
229

230
    registerBasicParameter<LineAngleParameters, int>(
430✔
231
            "Calculate Line Angle", "polynomial_order", &LineAngleParameters::polynomial_order);
232

233
    registerBasicParameter<LineAngleParameters, float>(
430✔
234
            "Calculate Line Angle", "reference_x", &LineAngleParameters::reference_x);
235

236
    registerBasicParameter<LineAngleParameters, float>(
430✔
237
            "Calculate Line Angle", "reference_y", &LineAngleParameters::reference_y);
238

239
    // ==================== Line Clip ===============
240

241
    std::unordered_map<std::string, ClipSide> clip_side_map = {
86✔
242
            {"KeepBase", ClipSide::KeepBase},   // Keep the portion from line start to intersection
86✔
243
            {"KeepDistal", ClipSide::KeepDistal}// Keep the portion from intersection to line end
86✔
244
    };
602✔
245
    registerEnumParameter<LineClipParameters, ClipSide>(
430✔
246
            "Clip Line by Reference Line", "clip_side", &LineClipParameters::clip_side, clip_side_map);
247

248
    registerDataParameter<LineClipParameters, LineData>(
430✔
249
            "Clip Line by Reference Line", "reference_line_data", &LineClipParameters::reference_line_data);
250

251
    registerBasicParameter<LineClipParameters, int>(
430✔
252
            "Clip Line by Reference Line", "reference_frame", &LineClipParameters::reference_frame);
253

254

255
    // ==================== Line Curvature ===============
256

257
    registerBasicParameter<LineCurvatureParameters, float>(
430✔
258
            "Calculate Line Curvature", "position", &LineCurvatureParameters::position);
259

260
    std::unordered_map<std::string, CurvatureCalculationMethod> curvature_calculation_method_map = {
86✔
261
            {"PolynomialFit", CurvatureCalculationMethod::PolynomialFit}// Only method for now
86✔
262
    };
516✔
263
    registerEnumParameter<LineCurvatureParameters, CurvatureCalculationMethod>(
430✔
264
            "Calculate Line Curvature", "method", &LineCurvatureParameters::method, curvature_calculation_method_map);
265

266
    registerBasicParameter<LineCurvatureParameters, int>(
430✔
267
            "Calculate Line Curvature", "polynomial_order", &LineCurvatureParameters::polynomial_order);
268

269
    registerBasicParameter<LineCurvatureParameters, float>(
430✔
270
            "Calculate Line Curvature", "fitting_window_percentage", &LineCurvatureParameters::fitting_window_percentage);
271

272
    // ==================== Line Min Point Dist ===============
273

274
    registerDataParameter<LineMinPointDistParameters, PointData>(
430✔
275
            "Calculate Line to Point Distance", "point_data", &LineMinPointDistParameters::point_data);
276

277
    // ==================== Line Point Extraction ===============
278

279
    std::unordered_map<std::string, PointExtractionMethod> point_extraction_method_map = {
86✔
280
            {"Direct", PointExtractionMethod::Direct},       // Direct point selection based on indices
86✔
281
            {"Parametric", PointExtractionMethod::Parametric}// Use parametric polynomial interpolation
86✔
282
    };
602✔
283
    registerEnumParameter<LinePointExtractionParameters, PointExtractionMethod>(
430✔
284
            "Extract Point from Line", "method", &LinePointExtractionParameters::method, point_extraction_method_map);
285

286
    registerBasicParameter<LinePointExtractionParameters, float>(
430✔
287
            "Extract Point from Line", "position", &LinePointExtractionParameters::position);
288

289
    registerBasicParameter<LinePointExtractionParameters, int>(
430✔
290
            "Extract Point from Line", "polynomial_order", &LinePointExtractionParameters::polynomial_order);
291

292
    registerBasicParameter<LinePointExtractionParameters, bool>(
430✔
293
            "Extract Point from Line", "use_interpolation", &LinePointExtractionParameters::use_interpolation);
294

295
    // ==================== Line Resample ===============
296

297
    std::unordered_map<std::string, LineSimplificationAlgorithm> line_simplification_map = {
86✔
298
            {"Fixed Spacing", LineSimplificationAlgorithm::FixedSpacing},
86✔
299
            {"Douglas-Peucker", LineSimplificationAlgorithm::DouglasPeucker}};
602✔
300
    registerEnumParameter<LineResampleParameters, LineSimplificationAlgorithm>(
430✔
301
            "Resample Line", "algorithm", &LineResampleParameters::algorithm, line_simplification_map);
302

303
    registerBasicParameter<LineResampleParameters, float>(
430✔
304
            "Resample Line", "target_spacing", &LineResampleParameters::target_spacing);
305

306
    registerBasicParameter<LineResampleParameters, float>(
430✔
307
            "Resample Line", "epsilon", &LineResampleParameters::epsilon);
308

309
    // ==================== Line Subsegment ===============
310

311
    std::unordered_map<std::string, SubsegmentExtractionMethod> subsegment_extraction_method_map = {
86✔
312
            {"Direct", SubsegmentExtractionMethod::Direct},       // Direct point extraction based on indices
86✔
313
            {"Parametric", SubsegmentExtractionMethod::Parametric}// Use parametric polynomial interpolation
86✔
314
    };
602✔
315
    registerEnumParameter<LineSubsegmentParameters, SubsegmentExtractionMethod>(
430✔
316
            "Extract Line Subsegment", "method", &LineSubsegmentParameters::method, subsegment_extraction_method_map);
317

318
    registerBasicParameter<LineSubsegmentParameters, float>(
430✔
319
            "Extract Line Subsegment", "start_position", &LineSubsegmentParameters::start_position);
320

321
    registerBasicParameter<LineSubsegmentParameters, float>(
430✔
322
            "Extract Line Subsegment", "end_position", &LineSubsegmentParameters::end_position);
323

324
    registerBasicParameter<LineSubsegmentParameters, int>(
430✔
325
            "Extract Line Subsegment", "polynomial_order", &LineSubsegmentParameters::polynomial_order);
326

327
    registerBasicParameter<LineSubsegmentParameters, int>(
430✔
328
            "Extract Line Subsegment", "output_points", &LineSubsegmentParameters::output_points);
329

330
    registerBasicParameter<LineSubsegmentParameters, bool>(
430✔
331
            "Extract Line Subsegment", "preserve_original_spacing", &LineSubsegmentParameters::preserve_original_spacing);
332

333
    // ====================================================
334
    // ============== Mask Series ==================
335
    // ====================================================
336

337
    // ==================== Mask Area ===============
338
    // No parameters needed for mask area calculation
339

340
    // ==================== Mask Centroid ===============
341
    // No parameters needed for mask centroid calculation
342

343
    // ==================== Mask Connected Component ===============
344
    registerBasicParameter<MaskConnectedComponentParameters, int>(
430✔
345
            "Remove Small Connected Components", "threshold", &MaskConnectedComponentParameters::threshold);
346

347
    // ==================== Mask Hole Filling ===============
348
    // No parameters needed for mask hole filling calculation
349

350
    // ==================== Mask Median Filter ===============
351
    registerBasicParameter<MaskMedianFilterParameters, int>(
430✔
352
            "Apply Median Filter", "window_size", &MaskMedianFilterParameters::window_size);
353

354
    // ==================== Mask Principal Axis ===============
355
    std::unordered_map<std::string, PrincipalAxisType> principal_axis_type_map = {
86✔
356
            {"Major", PrincipalAxisType::Major},
86✔
357
            {"Minor", PrincipalAxisType::Minor}};
602✔
358

359
    registerEnumParameter<MaskPrincipalAxisParameters, PrincipalAxisType>(
430✔
360
            "Calculate Mask Principal Axis", "axis_type", &MaskPrincipalAxisParameters::axis_type, principal_axis_type_map);
361

362

363
    // ==================== Mask Skeletonize ===============
364
    // No parameters needed for mask skeletonize calculation
365

366
    // ==================== Mask To Line ===============
367

368
    std::unordered_map<std::string, LinePointSelectionMethod> line_point_selection_method_map = {
86✔
369
            {"NearestToReference", LinePointSelectionMethod::NearestToReference},
86✔
370
            {"Skeletonize", LinePointSelectionMethod::Skeletonize}};
602✔
371
    registerEnumParameter<MaskToLineParameters, LinePointSelectionMethod>(
430✔
372
            "Convert Mask To Line", "method", &MaskToLineParameters::method, line_point_selection_method_map);
373

374
    registerBasicParameter<MaskToLineParameters, float>(
430✔
375
            "Convert Mask To Line", "reference_x", &MaskToLineParameters::reference_x);
376

377
    registerBasicParameter<MaskToLineParameters, float>(
430✔
378
            "Convert Mask To Line", "reference_y", &MaskToLineParameters::reference_y);
379

380
    registerBasicParameter<MaskToLineParameters, int>(
430✔
381
            "Convert Mask To Line", "polynomial_order", &MaskToLineParameters::polynomial_order);
382

383
    registerBasicParameter<MaskToLineParameters, float>(
430✔
384
            "Convert Mask To Line", "error_threshold", &MaskToLineParameters::error_threshold);
385

386
    registerBasicParameter<MaskToLineParameters, bool>(
430✔
387
            "Convert Mask To Line", "remove_outliers", &MaskToLineParameters::remove_outliers);
388

389
    registerBasicParameter<MaskToLineParameters, int>(
430✔
390
            "Convert Mask To Line", "input_point_subsample_factor", &MaskToLineParameters::input_point_subsample_factor);
391

392
    registerBasicParameter<MaskToLineParameters, bool>(
430✔
393
            "Convert Mask To Line", "should_smooth_line", &MaskToLineParameters::should_smooth_line);
394

395
    registerBasicParameter<MaskToLineParameters, float>(
430✔
396
            "Convert Mask To Line", "output_resolution", &MaskToLineParameters::output_resolution);
397

398
    // ====================================================
399
    // ============== Media Series ==================
400
    // ====================================================
401

402
    // ==================== Whisker Tracing ===============
403

404
    registerBasicParameter<WhiskerTracingParameters, bool>(
430✔
405
            "Whisker Tracing", "use_processed_data", &WhiskerTracingParameters::use_processed_data);
406

407
    registerBasicParameter<WhiskerTracingParameters, int>(
430✔
408
            "Whisker Tracing", "clip_length", &WhiskerTracingParameters::clip_length);
409

410
    registerBasicParameter<WhiskerTracingParameters, float>(
430✔
411
            "Whisker Tracing", "whisker_length_threshold", &WhiskerTracingParameters::whisker_length_threshold);
412

413
    registerBasicParameter<WhiskerTracingParameters, int>(
430✔
414
            "Whisker Tracing", "batch_size", &WhiskerTracingParameters::batch_size);
415

416
    registerBasicParameter<WhiskerTracingParameters, bool>(
430✔
417
            "Whisker Tracing", "use_parallel_processing", &WhiskerTracingParameters::use_parallel_processing);
418

419
    registerBasicParameter<WhiskerTracingParameters, bool>(
430✔
420
            "Whisker Tracing", "use_mask_data", &WhiskerTracingParameters::use_mask_data);
421

422
    registerDataParameter<WhiskerTracingParameters, MaskData>(
430✔
423
            "Whisker Tracing", "mask_data", &WhiskerTracingParameters::mask_data);
424

425
    // ====================================================
426
    // ============== Grouping Operations =================
427
    // ====================================================
428

429
    // ==================== Line Proximity Grouping ===============
430
    registerBasicParameter<LineProximityGroupingParameters, float>(
430✔
431
            "Group Lines by Proximity", "distance_threshold", &LineProximityGroupingParameters::distance_threshold);
432

433
    registerBasicParameter<LineProximityGroupingParameters, float>(
430✔
434
            "Group Lines by Proximity", "position_along_line", &LineProximityGroupingParameters::position_along_line);
435

436
    registerBasicParameter<LineProximityGroupingParameters, bool>(
430✔
437
            "Group Lines by Proximity", "create_new_group_for_outliers", &LineProximityGroupingParameters::create_new_group_for_outliers);
438

439
    registerBasicParameter<LineProximityGroupingParameters, std::string>(
430✔
440
            "Group Lines by Proximity", "new_group_name", &LineProximityGroupingParameters::new_group_name);
441

442
    // ==================== Line Kalman Grouping ===============
443
    registerBasicParameter<LineKalmanGroupingParameters, double>(
430✔
444
            "Group Lines using Kalman Filtering", "dt", &LineKalmanGroupingParameters::dt);
445

446
    registerBasicParameter<LineKalmanGroupingParameters, double>(
430✔
447
            "Group Lines using Kalman Filtering", "process_noise_position", &LineKalmanGroupingParameters::process_noise_position);
448

449
    registerBasicParameter<LineKalmanGroupingParameters, double>(
430✔
450
            "Group Lines using Kalman Filtering", "process_noise_velocity", &LineKalmanGroupingParameters::process_noise_velocity);
451

452
    registerBasicParameter<LineKalmanGroupingParameters, double>(
430✔
453
            "Group Lines using Kalman Filtering", "measurement_noise", &LineKalmanGroupingParameters::measurement_noise);
454

455
    registerBasicParameter<LineKalmanGroupingParameters, double>(
430✔
456
            "Group Lines using Kalman Filtering", "initial_position_uncertainty", &LineKalmanGroupingParameters::initial_position_uncertainty);
457

458
    registerBasicParameter<LineKalmanGroupingParameters, double>(
430✔
459
            "Group Lines using Kalman Filtering", "initial_velocity_uncertainty", &LineKalmanGroupingParameters::initial_velocity_uncertainty);
460

461
    registerBasicParameter<LineKalmanGroupingParameters, double>(
430✔
462
            "Group Lines using Kalman Filtering", "max_assignment_distance", &LineKalmanGroupingParameters::max_assignment_distance);
463

464
    registerBasicParameter<LineKalmanGroupingParameters, double>(
430✔
465
            "Group Lines using Kalman Filtering", "min_kalman_confidence", &LineKalmanGroupingParameters::min_kalman_confidence);
466

467
    registerBasicParameter<LineKalmanGroupingParameters, bool>(
430✔
468
            "Group Lines using Kalman Filtering", "estimate_noise_empirically", &LineKalmanGroupingParameters::estimate_noise_empirically);
469

470
    registerBasicParameter<LineKalmanGroupingParameters, bool>(
430✔
471
            "Group Lines using Kalman Filtering", "run_backward_smoothing", &LineKalmanGroupingParameters::run_backward_smoothing);
472

473
    registerBasicParameter<LineKalmanGroupingParameters, bool>(
430✔
474
            "Group Lines using Kalman Filtering", "create_new_group_for_outliers", &LineKalmanGroupingParameters::create_new_group_for_outliers);
475

476
    registerBasicParameter<LineKalmanGroupingParameters, std::string>(
430✔
477
            "Group Lines using Kalman Filtering", "new_group_name", &LineKalmanGroupingParameters::new_group_name);
478

479
    registerBasicParameter<LineKalmanGroupingParameters, bool>(
430✔
480
            "Group Lines using Kalman Filtering", "verbose_output", &LineKalmanGroupingParameters::verbose_output);
481
}
1,462✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc