Refactor the cylinder parameter selection and optimization process to
improve accuracy and robustness.
- Implement `snap_to_discrete_values_xfr` using a KDTree for efficient
mapping of continuous diameter and length values to a predefined
set of discrete points.
- Update `objective_function_xfr` to use the new snapping mechanism
and introduce a weighted loss component for diameter and length.
- Adjust PSO optimization bounds and search ranges in `run_pso_torch_xfr`
to better align with image dimensions and anatomical constraints.
- Refine scoring logic in `cl_score_torch_xfr` with updated penalty
weights for overlaps and out-of-bone voxels.
- Update `config/constant.py` with new allowed diameter and length
ranges.
- Improve `imaging/preprocessing.py` by making `PROGRESS_FILE` a
parameter to allow per-output-directory progress tracking.
- Update `xfr_debug.py` with improved error handling and directory
paths for batch processing.