pycerr 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cerr/__init__.py +0 -0
- cerr/_version.py +24 -0
- cerr/contour/__init__.py +0 -0
- cerr/contour/contour_processing.py +172 -0
- cerr/contour/rasterseg.py +498 -0
- cerr/dataclasses/__init__.py +0 -0
- cerr/dataclasses/beams.py +462 -0
- cerr/dataclasses/dcm_cerr_name_map.json +59 -0
- cerr/dataclasses/deform.py +228 -0
- cerr/dataclasses/dose.py +898 -0
- cerr/dataclasses/header.py +21 -0
- cerr/dataclasses/imrt.py +18 -0
- cerr/dataclasses/scan.py +1195 -0
- cerr/dataclasses/scan_info.py +236 -0
- cerr/dataclasses/structure.py +1630 -0
- cerr/datasets/__init__.py +112 -0
- cerr/datasets/convolutional_filter_settings/LoG_filter.json +20 -0
- cerr/datasets/convolutional_filter_settings/Rot_inv_laws_energy_filter.json +28 -0
- cerr/datasets/convolutional_filter_settings/gabor_filter.json +26 -0
- cerr/datasets/convolutional_filter_settings/mean_filter.json +19 -0
- cerr/datasets/radiomics_phantom_dicom/README_LICENSE.txt +11 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00000.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00001.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00002.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00003.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00004.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00005.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00006.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00007.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00008.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00009.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00010.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00011.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00012.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00013.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00014.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00015.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00016.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00017.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00018.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00019.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00020.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00021.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00022.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00023.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00024.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00025.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00026.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00027.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00028.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00029.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00030.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00031.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00032.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00033.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00034.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00035.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00036.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00037.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00038.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00039.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00040.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00041.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00042.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00043.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00044.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00045.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00046.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00047.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00048.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00049.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00050.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00051.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00052.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00053.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00054.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00055.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00056.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00057.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00058.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_IMG_00059.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_1/DCM_RS_00060.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00000.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00001.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00002.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00003.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00004.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00005.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00006.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00007.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00008.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00009.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00010.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00011.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00012.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00013.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00014.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00015.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00016.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00017.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00018.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00019.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00020.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00021.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00022.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00023.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00024.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00025.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00026.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00027.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00028.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00029.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00030.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00031.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00032.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00033.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00034.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00035.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00036.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00037.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00038.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00039.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_IMG_00040.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_2/DCM_RS_00041.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00000.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00001.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00002.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00003.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00004.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00005.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00006.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00007.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00008.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00009.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00010.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00011.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00012.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00013.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00014.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00015.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00016.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00017.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00018.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00019.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00020.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00021.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00022.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00023.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00024.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00025.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00026.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00027.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00028.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00029.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00030.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00031.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00032.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00033.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00034.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00035.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00036.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00037.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00038.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00039.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00040.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00041.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00042.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00043.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00044.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_IMG_00045.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_3/DCM_RS_00046.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00000.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00001.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00002.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00003.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00004.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00005.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00006.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00007.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00008.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00009.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00010.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00011.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00012.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00013.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00014.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00015.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00016.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00017.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00018.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00019.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00020.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00021.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00022.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00023.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00024.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00025.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00026.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00027.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00028.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00029.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00030.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00031.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00032.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00033.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00034.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00035.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00036.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00037.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00038.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00039.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00040.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00041.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00042.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00043.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00044.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00045.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00046.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00047.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00048.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00049.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00050.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00051.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00052.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00053.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00054.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_IMG_00055.dcm +0 -0
- cerr/datasets/radiomics_phantom_dicom/pat_4/DCM_RS_00056.dcm +0 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi1/ibsi1_id_a1.json +73 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi1/ibsi1_id_a2.json +74 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi1/ibsi1_id_b1.json +80 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi1/ibsi1_id_b2.json +79 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi1/ibsi1_id_c1.json +91 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi1/ibsi1_id_c2.json +91 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_1a1.json +20 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_1a2.json +21 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_1a3.json +21 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_1a4.json +21 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_1b1.json +21 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_1b2.json +21 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_2a.json +21 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_2b.json +21 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_2c.json +21 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_3a1.json +22 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_3a2.json +26 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_3a3.json +29 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_3b1.json +22 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_3b2.json +26 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_3b3.json +29 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_3c1.json +22 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_3c2.json +26 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_3c3.json +29 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_4a1.json +24 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_4a2.json +26 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_4b1.json +24 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_4b2.json +26 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_5a1.json +23 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_5a2.json +29 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_6a1.json +23 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_1/ibsi_phase2_1_id_6a2.json +30 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_1a.json +32 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_1b.json +38 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_2a.json +34 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_2b.json +42 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_3a.json +35 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_3b.json +41 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_4a.json +44 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_4b.json +49 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_5a.json +40 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_5b.json +49 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_6a.json +42 -0
- cerr/datasets/radiomics_settings/ibsi_settings/ibsi2_phase_2/ibsi_phase2_2_id_6b.json +49 -0
- cerr/datasets/radiomics_settings/original_settings.json +89 -0
- cerr/datasets/sample_ct/dosimetric_model_test_data/dose.nii +0 -0
- cerr/datasets/sample_ct/dosimetric_model_test_data/mask_(testStr1 U testStr3).nii +0 -0
- cerr/datasets/sample_ct/dosimetric_model_test_data/mask_testStr1.nii +0 -0
- cerr/datasets/sample_ct/dosimetric_model_test_data/mask_testStr2.nii +0 -0
- cerr/datasets/sample_ct/dosimetric_model_test_data/mask_testStr3.nii +0 -0
- cerr/datasets/sample_ct/dosimetric_model_test_data/scan.nii +0 -0
- cerr/dcm_export/__init__.py +0 -0
- cerr/dcm_export/iod_helper.py +151 -0
- cerr/dcm_export/reg_iod.py +478 -0
- cerr/dcm_export/rtstruct_iod.py +279 -0
- cerr/dvh.py +421 -0
- cerr/imrtp/README_IMRTP.md +181 -0
- cerr/imrtp/__init__.py +46 -0
- cerr/imrtp/dosecalc/QIBData/aahn_18b.dat +338 -0
- cerr/imrtp/dosecalc/QIBData/aahn_6b.dat +342 -0
- cerr/imrtp/dosecalc/QIBData/qib_tables.npz +0 -0
- cerr/imrtp/dosecalc/__init__.py +82 -0
- cerr/imrtp/dosecalc/influence.py +291 -0
- cerr/imrtp/dosecalc/montecarlo.py +117 -0
- cerr/imrtp/dosecalc/qib.py +329 -0
- cerr/imrtp/dosecalc/qib_data.py +108 -0
- cerr/imrtp/dosecalc/raytrace.py +277 -0
- cerr/imrtp/dosecalc/recalc.py +214 -0
- cerr/imrtp/dosecalc/rtplan.py +242 -0
- cerr/imrtp/imrtp.py +179 -0
- cerr/imrtp/imrtp_gui.py +1155 -0
- cerr/imrtp/imrtp_problem.py +407 -0
- cerr/mri_metrics/__init__.py +0 -0
- cerr/mri_metrics/dce_mri.py +961 -0
- cerr/multiViewHelper.py +443 -0
- cerr/plan_container.py +1331 -0
- cerr/radiomics/__init__.py +0 -0
- cerr/radiomics/first_order.py +144 -0
- cerr/radiomics/gray_level_cooccurence.py +340 -0
- cerr/radiomics/ibsi1.py +717 -0
- cerr/radiomics/neighbor_gray_level_dependence.py +201 -0
- cerr/radiomics/neighbor_gray_tone.py +170 -0
- cerr/radiomics/preprocess.py +774 -0
- cerr/radiomics/run_length.py +206 -0
- cerr/radiomics/shape.py +252 -0
- cerr/radiomics/size_zone.py +137 -0
- cerr/radiomics/texture_filters.py +1491 -0
- cerr/radiomics/texture_utils.py +291 -0
- cerr/radiomics/vector_elasticity.py +132 -0
- cerr/registration/__init__.py +0 -0
- cerr/registration/register.py +520 -0
- cerr/registration/settings/plastimatch_ct_ct_intra_pt_affine.txt +36 -0
- cerr/registration/settings/plastimatch_ct_ct_intra_pt_bsplines.txt +46 -0
- cerr/registration/settings/plastimatch_ct_ct_intra_pt_w_masks_affine.txt +38 -0
- cerr/registration/settings/plastimatch_ct_ct_intra_pt_w_masks_bsplines.txt +48 -0
- cerr/roe/__init__.py +1 -0
- cerr/roe/dosimetric_models.py +936 -0
- cerr/roe/model_parameters/Bronchial stenosis (cox).json +18 -0
- cerr/roe/model_parameters/Bronchial stenosis (logistic).json +17 -0
- cerr/roe/model_parameters/Bronchial toxicity (Grade 3+).json +31 -0
- cerr/roe/model_parameters/Bronchial toxicity (Grade 5).json +30 -0
- cerr/roe/model_parameters/Esophagitis (Huang).json +27 -0
- cerr/roe/model_parameters/Esophagitis (Jackson_cox).json +27 -0
- cerr/roe/model_parameters/Esophagitis (Jackson_logistic).json +27 -0
- cerr/roe/model_parameters/Esophagitis (Wijsman).json +35 -0
- cerr/roe/model_parameters/Pneumonitis (Appelt).json +58 -0
- cerr/roe/model_parameters/Rectal bleeding (grade 2+).json +20 -0
- cerr/roe/roe_gui.py +1370 -0
- cerr/scripts/demo_imrtp_gui.py +53 -0
- cerr/utils/__init__.py +0 -0
- cerr/utils/ai_pipeline.py +248 -0
- cerr/utils/custom_colormaps.py +262 -0
- cerr/utils/image_proc.py +477 -0
- cerr/utils/interp.py +218 -0
- cerr/utils/mask.py +746 -0
- cerr/utils/statistics.py +31 -0
- cerr/utils/uid.py +53 -0
- cerr/viewer/API_pycerr_gui.md +346 -0
- cerr/viewer/README_pycerr_gui.md +357 -0
- cerr/viewer/__init__.py +35 -0
- cerr/viewer/cerr_colormaps.py +4240 -0
- cerr/viewer/pycerr_gui.py +4701 -0
- cerr/viewer/pycerr_napari.py +1793 -0
- cerr/viewer/pycerr_nbviewer.py +683 -0
- pycerr-2.0.0.dist-info/METADATA +205 -0
- pycerr-2.0.0.dist-info/RECORD +357 -0
- pycerr-2.0.0.dist-info/WHEEL +5 -0
- pycerr-2.0.0.dist-info/licenses/LICENSE +674 -0
- pycerr-2.0.0.dist-info/top_level.txt +1 -0
cerr/__init__.py
ADDED
|
File without changes
|
cerr/_version.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# file generated by vcs-versioning
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"__version__",
|
|
7
|
+
"__version_tuple__",
|
|
8
|
+
"version",
|
|
9
|
+
"version_tuple",
|
|
10
|
+
"__commit_id__",
|
|
11
|
+
"commit_id",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
version: str
|
|
15
|
+
__version__: str
|
|
16
|
+
__version_tuple__: tuple[int | str, ...]
|
|
17
|
+
version_tuple: tuple[int | str, ...]
|
|
18
|
+
commit_id: str | None
|
|
19
|
+
__commit_id__: str | None
|
|
20
|
+
|
|
21
|
+
__version__ = version = '2.0.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 0, 0)
|
|
23
|
+
|
|
24
|
+
__commit_id__ = commit_id = None
|
cerr/contour/__init__.py
ADDED
|
File without changes
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from cerr import plan_container as pc
|
|
3
|
+
from cerr.utils import uid
|
|
4
|
+
import cerr.contour.rasterseg as rs
|
|
5
|
+
from shapelysmooth import chaikin_smooth
|
|
6
|
+
from shapelysmooth import catmull_rom_smooth
|
|
7
|
+
from shapelysmooth import taubin_smooth
|
|
8
|
+
import copy
|
|
9
|
+
|
|
10
|
+
'''
|
|
11
|
+
smooth_structure(planC, struct_num, replace_original = True, name_suffix = "", tol = 4, taubin_mu = 0.8, taubin_factor = 0.8, catmull_alpha = 1)
|
|
12
|
+
Description: Get structure object from planC/container. Apply 2D smoothing. Option: replace original structure (default=True), or insert new structure
|
|
13
|
+
Returns: updated planC
|
|
14
|
+
'''
|
|
15
|
+
|
|
16
|
+
def smoothStructure(planC, struct_idx, replace_original = True, name_suffix ="", tol = 4, taubin_mu = 0.8, taubin_factor = 0.8, catmull_alpha = 1):
|
|
17
|
+
"""Apply 2-D contour smoothing to every segment of a structure in planC.
|
|
18
|
+
|
|
19
|
+
Deep-copies the structure at ``struct_idx``, applies piecewise smoothing to
|
|
20
|
+
each 2-D contour segment via :func:`smooth2DContour`, regenerates raster
|
|
21
|
+
segments, and either replaces the original structure in ``planC`` or appends
|
|
22
|
+
a new one depending on ``replace_original``.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
planC (cerr.plan_container.PlanC): pyCERR plan container object.
|
|
26
|
+
struct_idx (int): Index of the structure to smooth in
|
|
27
|
+
``planC.structure``.
|
|
28
|
+
replace_original (bool, optional): When ``True`` (default) the
|
|
29
|
+
smoothed structure overwrites the original entry. When ``False``
|
|
30
|
+
the smoothed structure is appended as a new entry.
|
|
31
|
+
name_suffix (str, optional): String appended to the structure name of
|
|
32
|
+
the smoothed copy. Defaults to ``""``.
|
|
33
|
+
tol (int, optional): Minimum gap (in vertices) between jagged regions
|
|
34
|
+
for them to be treated as separate segments. Defaults to ``4``.
|
|
35
|
+
taubin_mu (float, optional): Mu parameter for Taubin smoothing of
|
|
36
|
+
jagged regions. Defaults to ``0.8``.
|
|
37
|
+
taubin_factor (float, optional): Factor (lambda) for Taubin smoothing.
|
|
38
|
+
Defaults to ``0.8``.
|
|
39
|
+
catmull_alpha (float, optional): Alpha parameter for Catmull-Rom
|
|
40
|
+
interpolation of smooth regions. Defaults to ``1``.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
cerr.plan_container.PlanC: The updated plan container with the smoothed
|
|
44
|
+
structure in place (or appended).
|
|
45
|
+
"""
|
|
46
|
+
struct_obj = copy.deepcopy(planC.structure[struct_idx])
|
|
47
|
+
for contour_orig in struct_obj.contour:
|
|
48
|
+
if contour_orig != []:
|
|
49
|
+
for seg in contour_orig.segments:
|
|
50
|
+
C = seg.points
|
|
51
|
+
z_coord = C[0][2]
|
|
52
|
+
X, tr = smooth2DContour(C, tol, taubin_mu, taubin_factor, catmull_alpha)
|
|
53
|
+
if X.shape[1] == 2:
|
|
54
|
+
Z = z_coord * np.ones((X.shape[0],1))
|
|
55
|
+
seg.points = np.hstack((X,Z))
|
|
56
|
+
struct_obj.strUID = uid.createUID("structure")
|
|
57
|
+
struct_obj.rasterSegments = rs.generateRastersegs(struct_obj, planC)
|
|
58
|
+
struct_obj.structureName = struct_obj.structureName + name_suffix
|
|
59
|
+
if not replace_original:
|
|
60
|
+
planC.structure.append(struct_obj)
|
|
61
|
+
else:
|
|
62
|
+
planC.structure[struct_idx] = struct_obj
|
|
63
|
+
return planC
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
'''
|
|
67
|
+
smooth_2D_contour(C, tol = 4, taubin_mu = 0.8, taubin_factor = 0.8, catmull_alpha = 1)
|
|
68
|
+
|
|
69
|
+
Description: Function will piecewise-smooth a closed contour C.
|
|
70
|
+
Returns: Smoothed Contour X, range indices of jagged regions in original contour, taubin_range
|
|
71
|
+
'''
|
|
72
|
+
|
|
73
|
+
def smooth2DContour(C, tol = 4, taubin_mu = 0.8, taubin_factor = 0.8, catmull_alpha = 1):
|
|
74
|
+
"""Piecewise-smooth a closed 2-D contour in place.
|
|
75
|
+
|
|
76
|
+
Identifies "jagged" vertices — those where the cosine of the interior
|
|
77
|
+
angle (``dot(v1, v2) / (|v1| |v2|)``) is either very small (near-perpendicular
|
|
78
|
+
turns) or very close to 1 (near-collinear, i.e. micro-steps) — groups them
|
|
79
|
+
into contiguous jagged regions, and applies Taubin smoothing to each jagged
|
|
80
|
+
region while using Catmull-Rom interpolation on the smooth regions in
|
|
81
|
+
between. If no jagged vertices are detected the original 2-D coordinates
|
|
82
|
+
are returned unchanged.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
C (np.ndarray): Contour vertex array of shape ``(N, 3)`` or ``(N, 2)``.
|
|
86
|
+
When 3 columns are present the third (z) column is stripped before
|
|
87
|
+
processing and not included in the output.
|
|
88
|
+
tol (int, optional): Maximum vertex-index gap allowed within a single
|
|
89
|
+
jagged region. Adjacent jagged vertices separated by more than
|
|
90
|
+
``tol`` indices are split into separate regions. Defaults to ``4``.
|
|
91
|
+
taubin_mu (float, optional): Mu parameter for Taubin smoothing.
|
|
92
|
+
Defaults to ``0.8``.
|
|
93
|
+
taubin_factor (float, optional): Factor (lambda) parameter for Taubin
|
|
94
|
+
smoothing. Defaults to ``0.8``.
|
|
95
|
+
catmull_alpha (float, optional): Alpha parameter for Catmull-Rom
|
|
96
|
+
interpolation. Defaults to ``1``.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
tuple:
|
|
100
|
+
- **piecewise_segs** (np.ndarray): Smoothed contour vertices as an
|
|
101
|
+
array of shape ``(M, 2)`` containing only the x/y coordinates.
|
|
102
|
+
Returns the original ``(N, 2)`` array unchanged when no jagged
|
|
103
|
+
segments are found.
|
|
104
|
+
- **taubin_range** (list[list[int]] | list): List of ``[start, end]``
|
|
105
|
+
vertex-index pairs identifying each jagged region that was
|
|
106
|
+
Taubin-smoothed. Empty list when no jagged segments were found.
|
|
107
|
+
"""
|
|
108
|
+
if C.shape[1] == 3:
|
|
109
|
+
Cxy = np.delete(C,2,1)
|
|
110
|
+
elif C.shape[2] == 2:
|
|
111
|
+
Cxy = C
|
|
112
|
+
N = C.shape[0]
|
|
113
|
+
C_sinT = np.ndarray(shape = (N-1,1))
|
|
114
|
+
C_jagg = []
|
|
115
|
+
for i in range(1,N-1):
|
|
116
|
+
x1 = C[i,:2] - C[i-1,:2]
|
|
117
|
+
x2 = C[i+1,:2] - C[i,:2]
|
|
118
|
+
sinT = np.dot(x1,x2) / (np.linalg.norm(x1) * np.linalg.norm(x2))
|
|
119
|
+
C_sinT[i-1,0] = sinT
|
|
120
|
+
if sinT < 0.005 or sinT > 0.995:
|
|
121
|
+
C_jagg.append(i)
|
|
122
|
+
range_lists = []
|
|
123
|
+
if C_jagg == []:
|
|
124
|
+
print('No jagged segments')
|
|
125
|
+
return Cxy, []
|
|
126
|
+
|
|
127
|
+
idx0 = C_jagg[0]
|
|
128
|
+
idxf = 0
|
|
129
|
+
|
|
130
|
+
for i in range(len(C_jagg)-1):
|
|
131
|
+
if np.absolute(C_jagg[i+1] - C_jagg[i]) > tol and np.absolute(C_jagg[i+1] - C_jagg[i]) != 0:
|
|
132
|
+
idxf = C_jagg[i]
|
|
133
|
+
if idxf != idx0:
|
|
134
|
+
range_lists.append([idx0,idxf])
|
|
135
|
+
idx0 = C_jagg[i+1]
|
|
136
|
+
if idxf < idx0:
|
|
137
|
+
idxf = C_jagg[-1]
|
|
138
|
+
range_lists.append([idx0,idxf])
|
|
139
|
+
taubin_range = range_lists
|
|
140
|
+
|
|
141
|
+
if taubin_range[0][0] > 0:
|
|
142
|
+
cf = taubin_range[0][0]
|
|
143
|
+
if taubin_range[-1][1] != N:
|
|
144
|
+
c0 = taubin_range[-1][1]
|
|
145
|
+
C1 = C[c0:N-1,0:2]
|
|
146
|
+
C2 = C[0:cf+1,0:2]
|
|
147
|
+
C_tmp = np.concatenate((C1,C2))
|
|
148
|
+
else:
|
|
149
|
+
C_tmp = C[0:cf,0:2]
|
|
150
|
+
geom = list(map(tuple,C_tmp))
|
|
151
|
+
C_catmull = np.asarray(catmull_rom_smooth(geom,alpha=catmull_alpha))
|
|
152
|
+
piecewise_segs = C_catmull
|
|
153
|
+
else:
|
|
154
|
+
piecewise_segs = C[0,0:2]
|
|
155
|
+
|
|
156
|
+
for x in range(len(taubin_range)):
|
|
157
|
+
t = taubin_range[x]
|
|
158
|
+
t0 = t[0]
|
|
159
|
+
tf = t[1]
|
|
160
|
+
if tf - t0 > 1:
|
|
161
|
+
geom = list(map(tuple, C[t0:tf+1,0:2]))
|
|
162
|
+
C_taubin = np.asarray(taubin_smooth(geom,mu = taubin_mu, factor = taubin_factor))
|
|
163
|
+
piecewise_segs = np.concatenate((piecewise_segs, C_taubin))
|
|
164
|
+
c0 = tf + 1
|
|
165
|
+
if x + 1 < len(taubin_range):
|
|
166
|
+
t2 = taubin_range[x+1]
|
|
167
|
+
cf = t2[0]
|
|
168
|
+
geom = list(map(tuple, C[c0:cf + 1,0:2]))
|
|
169
|
+
C_catmull = np.asarray(catmull_rom_smooth(geom,alpha=catmull_alpha))
|
|
170
|
+
piecewise_segs = np.concatenate((piecewise_segs, C_catmull))
|
|
171
|
+
|
|
172
|
+
return piecewise_segs, taubin_range
|