PaIRS-UniNa 0.1.13__cp310-cp310-win_amd64.whl → 0.2.8__cp310-cp310-win_amd64.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.
- PaIRS_UniNa/Calibration_Tab.py +331 -0
- PaIRS_UniNa/Changes.txt +134 -2
- PaIRS_UniNa/Custom_Top.py +299 -299
- PaIRS_UniNa/Explorer.py +3136 -0
- PaIRS_UniNa/FolderLoop.py +562 -0
- PaIRS_UniNa/Input_Tab.py +831 -0
- PaIRS_UniNa/Input_Tab_CalVi.py +786 -0
- PaIRS_UniNa/Input_Tab_tools.py +3025 -0
- PaIRS_UniNa/Log_Tab.py +57 -14
- PaIRS_UniNa/Output_Tab.py +922 -0
- PaIRS_UniNa/PaIRS_PIV.py +111 -18
- PaIRS_UniNa/PaIRS_pypacks.py +698 -140
- PaIRS_UniNa/Process_Tab.py +1221 -1402
- PaIRS_UniNa/Process_Tab_CalVi.py +137 -262
- PaIRS_UniNa/Process_Tab_Disp.py +163 -0
- PaIRS_UniNa/Process_Tab_Min.py +120 -0
- PaIRS_UniNa/Saving_tools.py +296 -0
- PaIRS_UniNa/TabTools.py +863 -543
- PaIRS_UniNa/Vis_Tab.py +1898 -1315
- PaIRS_UniNa/Vis_Tab_CalVi.py +484 -356
- PaIRS_UniNa/Whatsnew.py +59 -10
- PaIRS_UniNa/_PaIRS_PIV.pyd +0 -0
- PaIRS_UniNa/__init__.py +4 -3
- PaIRS_UniNa/addwidgets_ps.py +326 -56
- PaIRS_UniNa/calib.py +19 -12
- PaIRS_UniNa/calibView.py +48 -25
- PaIRS_UniNa/gPaIRS.py +3902 -3461
- PaIRS_UniNa/gPalette.py +189 -170
- PaIRS_UniNa/icons/align_all.png +0 -0
- PaIRS_UniNa/icons/announcement.png +0 -0
- PaIRS_UniNa/icons/automatic_levels_off.png +0 -0
- PaIRS_UniNa/icons/automatic_levels_on.png +0 -0
- PaIRS_UniNa/icons/automatic_off.png +0 -0
- PaIRS_UniNa/icons/automatic_on.png +0 -0
- PaIRS_UniNa/icons/automatic_size_off.png +0 -0
- PaIRS_UniNa/icons/automatic_size_on.png +0 -0
- PaIRS_UniNa/icons/bin_off.png +0 -0
- PaIRS_UniNa/icons/bin_on.png +0 -0
- PaIRS_UniNa/icons/brush_cursor.png +0 -0
- PaIRS_UniNa/icons/bugfix.png +0 -0
- PaIRS_UniNa/icons/cal_proc.png +0 -0
- PaIRS_UniNa/icons/cal_proc_off.png +0 -0
- PaIRS_UniNa/icons/cal_step.png +0 -0
- PaIRS_UniNa/icons/cal_step_off.png +0 -0
- PaIRS_UniNa/icons/calibration_logo.png +0 -0
- PaIRS_UniNa/icons/change_folder.png +0 -0
- PaIRS_UniNa/icons/change_folder_off.png +0 -0
- PaIRS_UniNa/icons/close_all.png +0 -0
- PaIRS_UniNa/icons/close_workspace.png +0 -0
- PaIRS_UniNa/icons/colormap.png +0 -0
- PaIRS_UniNa/icons/colormaps/Accent.png +0 -0
- PaIRS_UniNa/icons/colormaps/BrBG.png +0 -0
- PaIRS_UniNa/icons/colormaps/Dark2.png +0 -0
- PaIRS_UniNa/icons/colormaps/PRGn.png +0 -0
- PaIRS_UniNa/icons/colormaps/Paired.png +0 -0
- PaIRS_UniNa/icons/colormaps/Pastel1.png +0 -0
- PaIRS_UniNa/icons/colormaps/Pastel2.png +0 -0
- PaIRS_UniNa/icons/colormaps/PiYG.png +0 -0
- PaIRS_UniNa/icons/colormaps/PuOr.png +0 -0
- PaIRS_UniNa/icons/colormaps/RdBu.png +0 -0
- PaIRS_UniNa/icons/colormaps/RdGy.png +0 -0
- PaIRS_UniNa/icons/colormaps/RdYlBu.png +0 -0
- PaIRS_UniNa/icons/colormaps/RdYlGn.png +0 -0
- PaIRS_UniNa/icons/colormaps/Set1.png +0 -0
- PaIRS_UniNa/icons/colormaps/Set2.png +0 -0
- PaIRS_UniNa/icons/colormaps/Set3.png +0 -0
- PaIRS_UniNa/icons/colormaps/Spectral.png +0 -0
- PaIRS_UniNa/icons/colormaps/Wistia.png +0 -0
- PaIRS_UniNa/icons/colormaps/afmhot.png +0 -0
- PaIRS_UniNa/icons/colormaps/autumn.png +0 -0
- PaIRS_UniNa/icons/colormaps/binary.png +0 -0
- PaIRS_UniNa/icons/colormaps/blackVector.png +0 -0
- PaIRS_UniNa/icons/colormaps/blueVector.png +0 -0
- PaIRS_UniNa/icons/colormaps/bone.png +0 -0
- PaIRS_UniNa/icons/colormaps/brg.png +0 -0
- PaIRS_UniNa/icons/colormaps/bwr.png +0 -0
- PaIRS_UniNa/icons/colormaps/cividis.png +0 -0
- PaIRS_UniNa/icons/colormaps/cool.png +0 -0
- PaIRS_UniNa/icons/colormaps/coolwarm.png +0 -0
- PaIRS_UniNa/icons/colormaps/copper.png +0 -0
- PaIRS_UniNa/icons/colormaps/cubehelix.png +0 -0
- PaIRS_UniNa/icons/colormaps/cyanVector.png +0 -0
- PaIRS_UniNa/icons/colormaps/flag.png +0 -0
- PaIRS_UniNa/icons/colormaps/gist_heat.png +0 -0
- PaIRS_UniNa/icons/colormaps/gray.png +0 -0
- PaIRS_UniNa/icons/colormaps/greenVector.png +0 -0
- PaIRS_UniNa/icons/colormaps/hot.png +0 -0
- PaIRS_UniNa/icons/colormaps/hsv.png +0 -0
- PaIRS_UniNa/icons/colormaps/inferno.png +0 -0
- PaIRS_UniNa/icons/colormaps/jet.png +0 -0
- PaIRS_UniNa/icons/colormaps/magentaVector.png +0 -0
- PaIRS_UniNa/icons/colormaps/magma.png +0 -0
- PaIRS_UniNa/icons/colormaps/ocean.png +0 -0
- PaIRS_UniNa/icons/colormaps/pink.png +0 -0
- PaIRS_UniNa/icons/colormaps/plasma.png +0 -0
- PaIRS_UniNa/icons/colormaps/prism.png +0 -0
- PaIRS_UniNa/icons/colormaps/rainbow.png +0 -0
- PaIRS_UniNa/icons/colormaps/redVector.png +0 -0
- PaIRS_UniNa/icons/colormaps/seismic.png +0 -0
- PaIRS_UniNa/icons/colormaps/spring.png +0 -0
- PaIRS_UniNa/icons/colormaps/summer.png +0 -0
- PaIRS_UniNa/icons/colormaps/tab10.png +0 -0
- PaIRS_UniNa/icons/colormaps/tab20.png +0 -0
- PaIRS_UniNa/icons/colormaps/tab20b.png +0 -0
- PaIRS_UniNa/icons/colormaps/tab20c.png +0 -0
- PaIRS_UniNa/icons/colormaps/terrain.png +0 -0
- PaIRS_UniNa/icons/colormaps/twilight.png +0 -0
- PaIRS_UniNa/icons/colormaps/viridis.png +0 -0
- PaIRS_UniNa/icons/colormaps/whiteVector.png +0 -0
- PaIRS_UniNa/icons/colormaps/winter.png +0 -0
- PaIRS_UniNa/icons/colormaps/yellowVector.png +0 -0
- PaIRS_UniNa/icons/common_region.png +0 -0
- PaIRS_UniNa/icons/common_region_off.png +0 -0
- PaIRS_UniNa/icons/completed.png +0 -0
- PaIRS_UniNa/icons/contourf_off.png +0 -0
- PaIRS_UniNa/icons/contourf_on.png +0 -0
- PaIRS_UniNa/icons/copy.png +0 -0
- PaIRS_UniNa/icons/copy_process.png +0 -0
- PaIRS_UniNa/icons/copy_process_off.png +0 -0
- PaIRS_UniNa/icons/cut.png +0 -0
- PaIRS_UniNa/icons/cut_warnings.png +0 -0
- PaIRS_UniNa/icons/darkmode.png +0 -0
- PaIRS_UniNa/icons/disp_step.png +0 -0
- PaIRS_UniNa/icons/disp_step_off.png +0 -0
- PaIRS_UniNa/icons/edit_list.png +0 -0
- PaIRS_UniNa/icons/example_list.png +0 -0
- PaIRS_UniNa/icons/flaticon_PaIRS_beta.png +0 -0
- PaIRS_UniNa/icons/flaticon_PaIRS_download_warning.png +0 -0
- PaIRS_UniNa/icons/flip_y_off.png +0 -0
- PaIRS_UniNa/icons/flip_y_on.png +0 -0
- PaIRS_UniNa/icons/folder_loop_cleanup.png +0 -0
- PaIRS_UniNa/icons/folder_loop_cleanup_off.png +0 -0
- PaIRS_UniNa/icons/gear.gif +0 -0
- PaIRS_UniNa/icons/gear.png +0 -0
- PaIRS_UniNa/icons/import_set.png +0 -0
- PaIRS_UniNa/icons/information.png +0 -0
- PaIRS_UniNa/icons/input_logo.png +0 -0
- PaIRS_UniNa/icons/issue.png +0 -0
- PaIRS_UniNa/icons/laser_NTR.png +0 -0
- PaIRS_UniNa/icons/laser_TR_double.png +0 -0
- PaIRS_UniNa/icons/laser_TR_single.png +0 -0
- PaIRS_UniNa/icons/link.png +0 -0
- PaIRS_UniNa/icons/linked.png +0 -0
- PaIRS_UniNa/icons/log_logo.png +0 -0
- PaIRS_UniNa/icons/logo_opaco.png +0 -0
- PaIRS_UniNa/icons/measure.png +0 -0
- PaIRS_UniNa/icons/measure_off.png +0 -0
- PaIRS_UniNa/icons/min_proc.png +0 -0
- PaIRS_UniNa/icons/min_proc_off.png +0 -0
- PaIRS_UniNa/icons/min_step.png +0 -0
- PaIRS_UniNa/icons/min_step_off.png +0 -0
- PaIRS_UniNa/icons/new_workspace.png +0 -0
- PaIRS_UniNa/icons/open_image.png +0 -0
- PaIRS_UniNa/icons/open_new_window.png +0 -0
- PaIRS_UniNa/icons/open_result.png +0 -0
- PaIRS_UniNa/icons/open_workspace.png +0 -0
- PaIRS_UniNa/icons/output_logo.png +0 -0
- PaIRS_UniNa/icons/paste_above.png +0 -0
- PaIRS_UniNa/icons/paste_below.png +0 -0
- PaIRS_UniNa/icons/paused.png +0 -0
- PaIRS_UniNa/icons/piv_proc.png +0 -0
- PaIRS_UniNa/icons/piv_proc_off.png +0 -0
- PaIRS_UniNa/icons/piv_step.png +0 -0
- PaIRS_UniNa/icons/piv_step_off.png +0 -0
- PaIRS_UniNa/icons/process_logo.png +0 -0
- PaIRS_UniNa/icons/process_loop.png +0 -0
- PaIRS_UniNa/icons/project.png +0 -0
- PaIRS_UniNa/icons/pylog.png +0 -0
- PaIRS_UniNa/icons/python_warning.png +0 -0
- PaIRS_UniNa/icons/queue.png +0 -0
- PaIRS_UniNa/icons/read.png +0 -0
- PaIRS_UniNa/icons/read_list.png +0 -0
- PaIRS_UniNa/icons/reset.png +0 -0
- PaIRS_UniNa/icons/reset_levels.png +0 -0
- PaIRS_UniNa/icons/restore_undo.png +0 -0
- PaIRS_UniNa/icons/running.gif +0 -0
- PaIRS_UniNa/icons/running.png +0 -0
- PaIRS_UniNa/icons/running_warn.png +0 -0
- PaIRS_UniNa/icons/save_and_stop.png +0 -0
- PaIRS_UniNa/icons/save_cfg.png +0 -0
- PaIRS_UniNa/icons/saveas_workspace.png +0 -0
- PaIRS_UniNa/icons/scale_all.png +0 -0
- PaIRS_UniNa/icons/scale_down.png +0 -0
- PaIRS_UniNa/icons/scale_up.png +0 -0
- PaIRS_UniNa/icons/scan_list.png +0 -0
- PaIRS_UniNa/icons/scan_path.png +0 -0
- PaIRS_UniNa/icons/scan_path_loop.png +0 -0
- PaIRS_UniNa/icons/scan_path_loop_off.png +0 -0
- PaIRS_UniNa/icons/search.png +0 -0
- PaIRS_UniNa/icons/showIW_off.png +0 -0
- PaIRS_UniNa/icons/showIW_on.png +0 -0
- PaIRS_UniNa/icons/show_all.png +0 -0
- PaIRS_UniNa/icons/sort.png +0 -0
- PaIRS_UniNa/icons/sort_reversed.png +0 -0
- PaIRS_UniNa/icons/spiv_proc.png +0 -0
- PaIRS_UniNa/icons/spiv_proc_off.png +0 -0
- PaIRS_UniNa/icons/star.png +0 -0
- PaIRS_UniNa/icons/step_inheritance.png +0 -0
- PaIRS_UniNa/icons/subMIN_off.png +0 -0
- PaIRS_UniNa/icons/subMIN_on.png +0 -0
- PaIRS_UniNa/icons/unedited.png +0 -0
- PaIRS_UniNa/icons/uninitialized.png +0 -0
- PaIRS_UniNa/icons/unlink.png +0 -0
- PaIRS_UniNa/icons/unwrap_items.png +0 -0
- PaIRS_UniNa/icons/vectorColor.png +0 -0
- PaIRS_UniNa/icons/view.png +0 -0
- PaIRS_UniNa/icons/view_off.png +0 -0
- PaIRS_UniNa/icons/vis_logo.png +0 -0
- PaIRS_UniNa/icons/warning_circle.png +0 -0
- PaIRS_UniNa/icons/window.png +0 -0
- PaIRS_UniNa/icons/workspace.png +0 -0
- PaIRS_UniNa/icons/wrap_items.png +0 -0
- PaIRS_UniNa/icons/write_list.png +0 -0
- PaIRS_UniNa/listLib.py +303 -0
- PaIRS_UniNa/mtfPIV.py +8 -8
- PaIRS_UniNa/parForMulti.py +7 -5
- PaIRS_UniNa/parForWorkers.py +370 -31
- PaIRS_UniNa/pivParFor.py +233 -229
- PaIRS_UniNa/plt_util.py +141 -141
- PaIRS_UniNa/preProcParFor.py +153 -148
- PaIRS_UniNa/procTools.py +631 -178
- PaIRS_UniNa/readcfg.py +31 -1
- PaIRS_UniNa/rqrdpckgs.txt +9 -0
- PaIRS_UniNa/stereoPivParFor.py +227 -0
- PaIRS_UniNa/tAVarie.py +215 -215
- PaIRS_UniNa/tabSplitter.py +612 -0
- PaIRS_UniNa/ui_Calibration_Tab.py +545 -0
- PaIRS_UniNa/ui_Custom_Top.py +5 -5
- PaIRS_UniNa/ui_Input_Tab.py +1101 -0
- PaIRS_UniNa/{ui_Import_Tab_CalVi.py → ui_Input_Tab_CalVi.py} +1282 -1275
- PaIRS_UniNa/ui_Log_Tab.py +262 -257
- PaIRS_UniNa/{ui_Export_Tab.py → ui_Output_Tab.py} +2361 -1778
- PaIRS_UniNa/ui_Process_Tab.py +3809 -3758
- PaIRS_UniNa/ui_Process_Tab_CalVi.py +1547 -1546
- PaIRS_UniNa/ui_Process_Tab_Disp.py +1141 -0
- PaIRS_UniNa/ui_Process_Tab_Min.py +437 -0
- PaIRS_UniNa/ui_Vis_Tab.py +1626 -1208
- PaIRS_UniNa/ui_Vis_Tab_CalVi.py +1249 -1249
- PaIRS_UniNa/ui_Whatsnew.py +131 -131
- PaIRS_UniNa/ui_gPairs.py +876 -950
- PaIRS_UniNa/ui_infoPaIRS.py +550 -425
- PaIRS_UniNa/whatsnew.txt +6 -4
- {PaIRS_UniNa-0.1.13.dist-info → pairs_unina-0.2.8.dist-info}/METADATA +69 -51
- pairs_unina-0.2.8.dist-info/RECORD +329 -0
- {PaIRS_UniNa-0.1.13.dist-info → pairs_unina-0.2.8.dist-info}/WHEEL +1 -1
- PaIRS_UniNa/CalVi.py +0 -18
- PaIRS_UniNa/Export_Tab.py +0 -574
- PaIRS_UniNa/Import_Tab.py +0 -657
- PaIRS_UniNa/Import_Tab_CalVi.py +0 -861
- PaIRS_UniNa/Import_Tab_tools.py +0 -598
- PaIRS_UniNa/Tree_Tab.py +0 -543
- PaIRS_UniNa/gCalVi.py +0 -2024
- PaIRS_UniNa/icons/add.png +0 -0
- PaIRS_UniNa/icons/cancelled.png +0 -0
- PaIRS_UniNa/icons/chain.png +0 -0
- PaIRS_UniNa/icons/chain_broken.png +0 -0
- PaIRS_UniNa/icons/default_sizes.png +0 -0
- PaIRS_UniNa/icons/dock_tabs.png +0 -0
- PaIRS_UniNa/icons/done.png +0 -0
- PaIRS_UniNa/icons/down_arrow.png +0 -0
- PaIRS_UniNa/icons/export_logo.png +0 -0
- PaIRS_UniNa/icons/fast_delete.png +0 -0
- PaIRS_UniNa/icons/flip_y.png +0 -0
- PaIRS_UniNa/icons/ganci.png +0 -0
- PaIRS_UniNa/icons/import_blue.png +0 -0
- PaIRS_UniNa/icons/import_logo.png +0 -0
- PaIRS_UniNa/icons/missing.png +0 -0
- PaIRS_UniNa/icons/process_icon.png +0 -0
- PaIRS_UniNa/icons/processing.png +0 -0
- PaIRS_UniNa/icons/restart.png +0 -0
- PaIRS_UniNa/icons/right_arrow.png +0 -0
- PaIRS_UniNa/icons/run_piv.png +0 -0
- PaIRS_UniNa/icons/terminal.png +0 -0
- PaIRS_UniNa/icons/undock_tabs.png +0 -0
- PaIRS_UniNa/icons/vect_field.png +0 -0
- PaIRS_UniNa/icons/w0.png +0 -0
- PaIRS_UniNa/icons/w1.png +0 -0
- PaIRS_UniNa/icons/w2.png +0 -0
- PaIRS_UniNa/icons/w3.png +0 -0
- PaIRS_UniNa/icons/w4.png +0 -0
- PaIRS_UniNa/icons/w5.png +0 -0
- PaIRS_UniNa/run_CalVi.py +0 -14
- PaIRS_UniNa/run_gcalvi.py +0 -5
- PaIRS_UniNa/ui_Import_Tab.py +0 -1077
- PaIRS_UniNa/ui_Tree_Tab.py +0 -684
- PaIRS_UniNa/ui_gCalVi.py +0 -640
- PaIRS_UniNa/ui_infoCalVi.py +0 -428
- PaIRS_UniNa-0.1.13.dist-info/LICENSE +0 -19
- PaIRS_UniNa-0.1.13.dist-info/RECORD +0 -174
- /PaIRS_UniNa/icons/{clean_queue.png → clean.png} +0 -0
- /PaIRS_UniNa/icons/{waiting_c.png → sandglass.png} +0 -0
- {PaIRS_UniNa-0.1.13.dist-info → pairs_unina-0.2.8.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
from .ui_Calibration_Tab import*
|
|
2
|
+
from .TabTools import*
|
|
3
|
+
from .listLib import*
|
|
4
|
+
|
|
5
|
+
spin_tips={
|
|
6
|
+
'ncam' : 'Number of cameras',
|
|
7
|
+
}
|
|
8
|
+
check_tips={}
|
|
9
|
+
radio_tips={}
|
|
10
|
+
line_edit_tips={}
|
|
11
|
+
button_tips={
|
|
12
|
+
'CalVi': 'Open/Close CalVi',
|
|
13
|
+
'import': 'Calibration file import',
|
|
14
|
+
'scan_list': 'Re-scan list',
|
|
15
|
+
'copy': 'Copy items',
|
|
16
|
+
'cut': 'Cut items',
|
|
17
|
+
'paste_below': 'Paste items below',
|
|
18
|
+
'paste_above': 'Paste items above',
|
|
19
|
+
'clean': 'Clean list',
|
|
20
|
+
}
|
|
21
|
+
combo_tips={}
|
|
22
|
+
|
|
23
|
+
class CALpar(TABpar):
|
|
24
|
+
def __init__(self,Process=ProcessTypes.null,Step=StepTypes.null):
|
|
25
|
+
self.setup(Process,Step)
|
|
26
|
+
super().__init__('CALpar','Calibration')
|
|
27
|
+
self.OptionDone=0
|
|
28
|
+
self.unchecked_fields+=['row','calEx']
|
|
29
|
+
|
|
30
|
+
def setup(self,Process,Step):
|
|
31
|
+
self.Process = Process
|
|
32
|
+
self.Step = Step
|
|
33
|
+
|
|
34
|
+
self.FlagCalVi = False
|
|
35
|
+
self.ncam = 2 if Process==ProcessTypes.spiv else 1
|
|
36
|
+
self.FlagCam = False if Process==ProcessTypes.spiv else True
|
|
37
|
+
self.calList = []
|
|
38
|
+
self.calEx = []
|
|
39
|
+
self.row = -1
|
|
40
|
+
|
|
41
|
+
class Calibration_Tab(gPaIRS_Tab):
|
|
42
|
+
calibrationTreeButtons=['scan_list','-','import','|','copy','cut','paste_below','paste_above','|','clean']
|
|
43
|
+
class Process_Tab_Signals(gPaIRS_Tab.Tab_Signals):
|
|
44
|
+
pass
|
|
45
|
+
|
|
46
|
+
def __init__(self,parent: QWidget =None, flagInit= __name__ == "__main__"):
|
|
47
|
+
super().__init__(parent,Ui_CalibrationTab,CALpar)
|
|
48
|
+
self.signals=self.Process_Tab_Signals(self)
|
|
49
|
+
|
|
50
|
+
#------------------------------------- Graphical interface: widgets
|
|
51
|
+
self.TABname='Calibration'
|
|
52
|
+
self.ui: Ui_CalibrationTab
|
|
53
|
+
|
|
54
|
+
#necessary to change the name and the order of the items
|
|
55
|
+
for g in list(globals()):
|
|
56
|
+
if '_items' in g or '_ord' in g or '_tips' in g:
|
|
57
|
+
#pri.Info.blue(f'Adding {g} to {self.name_tab}')
|
|
58
|
+
setattr(self,g,eval(g))
|
|
59
|
+
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
self.app=app
|
|
62
|
+
setAppGuiPalette(self)
|
|
63
|
+
|
|
64
|
+
#------------------------------------- Declaration of parameters
|
|
65
|
+
self.CALpar_base=CALpar()
|
|
66
|
+
self.CALpar:CALpar=self.TABpar
|
|
67
|
+
self.CALpar_old:CALpar=self.TABpar_old
|
|
68
|
+
|
|
69
|
+
#------------------------------------- Callbacks
|
|
70
|
+
self.defineWidgets()
|
|
71
|
+
self.setupWid() #---------------- IMPORTANT
|
|
72
|
+
|
|
73
|
+
self.defineCallbacks()
|
|
74
|
+
self.connectCallbacks()
|
|
75
|
+
self.ui.calTree.itemSelectionChanged.connect(self.wrappedCallback('List selection',self.calibration_list_selection))
|
|
76
|
+
self.ui.calTree.signals.updateLists.connect(self.wrappedCallback('Re-ordering items',self.copyListsFromTree))
|
|
77
|
+
|
|
78
|
+
self.defineSettings()
|
|
79
|
+
|
|
80
|
+
self.adjustTABpar=self.adjustCALpar
|
|
81
|
+
self.setTABlayout=self.setCALlayout
|
|
82
|
+
self.checkTABpar=self.checkCALpar
|
|
83
|
+
self.setTABwarn=self.setCALwarn
|
|
84
|
+
|
|
85
|
+
#------------------------------------- Initializing
|
|
86
|
+
if flagInit:
|
|
87
|
+
self.initialize()
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def initialize(self):
|
|
91
|
+
pri.Info.yellow(f'{"*"*20} PROCESS Disp initialization {"*"*20}')
|
|
92
|
+
self.setTABpar(FlagAdjustPar=True,FlagBridge=False)
|
|
93
|
+
self.add_TABpar('initialization')
|
|
94
|
+
self.setFocus()
|
|
95
|
+
|
|
96
|
+
#*************************************************** Adjusting parameters
|
|
97
|
+
def adjustCALpar(self):
|
|
98
|
+
if self.CALpar.Process==ProcessTypes.spiv:
|
|
99
|
+
self.CALpar.ncam=2
|
|
100
|
+
self.CALpar.FlagCam=False
|
|
101
|
+
self.ui.calTree.ncam=self.CALpar.ncam
|
|
102
|
+
|
|
103
|
+
self.checkCALpar()
|
|
104
|
+
return
|
|
105
|
+
|
|
106
|
+
def checkCALpar(self,ind=None,FlagRescan=False):
|
|
107
|
+
if ind is None: CAL:CALpar=self.CALpar
|
|
108
|
+
else: CAL:CALpar=self.TABpar_at(ind)
|
|
109
|
+
if FlagRescan: self.scanCalList(ind)
|
|
110
|
+
CAL.OptionDone = 1 if all(CAL.calEx) and len(CAL.calList)==CAL.ncam else 0
|
|
111
|
+
|
|
112
|
+
def scanCalList(self,ind=None):
|
|
113
|
+
if ind is None: CAL:CALpar=self.CALpar
|
|
114
|
+
else: CAL:CALpar=self.TABpar_at(ind)
|
|
115
|
+
for c in range(len(CAL.calList)): #CAL.ncam
|
|
116
|
+
CAL.calEx[c]=os.path.exists(CAL.calList[c])
|
|
117
|
+
|
|
118
|
+
#*************************************************** Layout
|
|
119
|
+
def setCALlayout(self):
|
|
120
|
+
self.ui.label_ncam.adjustSize()
|
|
121
|
+
self.ui.spin_ncam.setEnabled(self.CALpar.FlagCam)
|
|
122
|
+
|
|
123
|
+
self.calibration_list_set()
|
|
124
|
+
|
|
125
|
+
FlagFiles=self.ui.calTree.nimg>0
|
|
126
|
+
FlagSelected=len(self.ui.calTree.selectedItems())>0
|
|
127
|
+
FlagNCal=self.ui.calTree.nimg<self.ui.calTree.ncam
|
|
128
|
+
FlagCuttedItems=len(CalibrationTree.cutted_items)>0
|
|
129
|
+
self.ui.button_scan_list.setEnabled(FlagFiles)
|
|
130
|
+
self.ui.button_import.setEnabled(FlagNCal)
|
|
131
|
+
self.ui.button_cut.setEnabled(FlagSelected)
|
|
132
|
+
self.ui.button_copy.setEnabled(FlagSelected)
|
|
133
|
+
self.ui.button_paste_below.setEnabled(FlagNCal and FlagCuttedItems)
|
|
134
|
+
self.ui.button_paste_above.setEnabled(FlagNCal and FlagCuttedItems)
|
|
135
|
+
self.ui.button_clean.setEnabled(FlagFiles)
|
|
136
|
+
|
|
137
|
+
self.ui.button_CalVi.setVisible(self.CALpar.flagRun==0)
|
|
138
|
+
|
|
139
|
+
self.checkCALpar()
|
|
140
|
+
self.setCALwarn()
|
|
141
|
+
self.setTABWarnLabel()
|
|
142
|
+
return
|
|
143
|
+
|
|
144
|
+
def setCALwarn(self,ind=None):
|
|
145
|
+
if ind is None: CAL:CALpar=self.CALpar
|
|
146
|
+
else: CAL:CALpar=self.TABpar_at(ind)
|
|
147
|
+
if CAL.OptionDone==1:
|
|
148
|
+
CAL.warningMessage='Calibration files correctly identified!'
|
|
149
|
+
else:
|
|
150
|
+
warningMessage=''
|
|
151
|
+
nFiles=len(CAL.calList)
|
|
152
|
+
if nFiles<CAL.ncam:
|
|
153
|
+
warningMessage+=f'Number of calibration files ({nFiles}) lower than number of cameras specified ({CAL.ncam})!'
|
|
154
|
+
if not all(CAL.calEx):
|
|
155
|
+
n=sum([1 if not ex else 0 for ex in CAL.calEx])
|
|
156
|
+
if warningMessage: warningMessage='\n* '
|
|
157
|
+
warningMessage+=f'{n} out of {CAL.ncam} calibration files missing!'
|
|
158
|
+
if '\n* ' in warningMessage: warningMessage='* '+warningMessage
|
|
159
|
+
CAL.warningMessage=warningMessage
|
|
160
|
+
|
|
161
|
+
#*************************************************** Spin ncam
|
|
162
|
+
#******************** Actions
|
|
163
|
+
def spin_ncam_action(self):
|
|
164
|
+
self.copyListsFromTree()
|
|
165
|
+
|
|
166
|
+
#*************************************************** Buttons
|
|
167
|
+
#******************** Actions
|
|
168
|
+
def button_CalVi_action(self):
|
|
169
|
+
self.CALpar.FlagCalVi=self.ui.button_CalVi.isChecked()
|
|
170
|
+
|
|
171
|
+
def button_scan_list_action(self):
|
|
172
|
+
self.ui.calTree.setLists()
|
|
173
|
+
self.CALpar.calEx=deep_duplicate(self.ui.calTree.calEx)
|
|
174
|
+
|
|
175
|
+
def button_import_action(self):
|
|
176
|
+
filenames, _ = QFileDialog.getOpenFileNames(self,\
|
|
177
|
+
"Select calibration files from the current directory", filter='*.cal',\
|
|
178
|
+
options=optionNativeDialog)
|
|
179
|
+
if filenames:
|
|
180
|
+
self.ui.calTree.hide()
|
|
181
|
+
self.ui.calTree.importLists(filenames)
|
|
182
|
+
self.copyListsFromTree()
|
|
183
|
+
self.ui.calTree.show()
|
|
184
|
+
|
|
185
|
+
def copyListsFromTree(self):
|
|
186
|
+
if self.ui.calTree.nimg>self.CALpar.ncam:
|
|
187
|
+
warningDialog(self,f'A number of files exceeding the specified number of cameras has been selected!\nOnly the first {self.CALpar.ncam} files will be retained in the list.')
|
|
188
|
+
self.CALpar.calList=deep_duplicate(self.ui.calTree.calList[:self.CALpar.ncam])
|
|
189
|
+
self.CALpar.calEx=deep_duplicate(self.ui.calTree.calEx[:self.CALpar.ncam])
|
|
190
|
+
self.calibration_list_selection()
|
|
191
|
+
|
|
192
|
+
def button_copy_cut_action(self, FlagCut=False):
|
|
193
|
+
self.ui.calTree.setVisible(False)
|
|
194
|
+
selectedItems,indexes=self.ui.calTree.selectTopLevel()
|
|
195
|
+
self.copy_cut_action(selectedItems,indexes,FlagCut)
|
|
196
|
+
|
|
197
|
+
def cutItems(self,items):
|
|
198
|
+
cutted_items=[None]*len(items)
|
|
199
|
+
for k,item in zip(range(len(items)),items): cutted_items[k]=self.ui.calTree.duplicateItem(item)
|
|
200
|
+
type(self.ui.calTree).cutted_items=cutted_items
|
|
201
|
+
return
|
|
202
|
+
|
|
203
|
+
def copy_cut_action(self,items,indexes,FlagCut):
|
|
204
|
+
self.cutItems(items)
|
|
205
|
+
|
|
206
|
+
if FlagCut:
|
|
207
|
+
for item in items:
|
|
208
|
+
self.ui.calTree.takeTopLevelItem(self.ui.calTree.indexOfTopLevelItem(item))
|
|
209
|
+
self.ui.calTree.cutLists(indexes)
|
|
210
|
+
else:
|
|
211
|
+
self.ui.calTree.copyLists(indexes)
|
|
212
|
+
|
|
213
|
+
self.ui.calTree.setVisible(True)
|
|
214
|
+
self.ui.calTree.setFocus()
|
|
215
|
+
|
|
216
|
+
self.copyListsFromTree()
|
|
217
|
+
|
|
218
|
+
def button_copy_action(self):
|
|
219
|
+
self.button_copy_cut_action(FlagCut=False)
|
|
220
|
+
|
|
221
|
+
def button_cut_action(self):
|
|
222
|
+
self.button_copy_cut_action(FlagCut=True)
|
|
223
|
+
|
|
224
|
+
def button_paste_above_below_action(self,FlagAbove=True):
|
|
225
|
+
if not self.ui.calTree.cutted_items: return
|
|
226
|
+
self.ui.calTree.setVisible(False)
|
|
227
|
+
FlagResizeHeader=self.ui.calTree.topLevelItemCount()==0
|
|
228
|
+
selectedItems,indexes=self.ui.calTree.selectTopLevel()
|
|
229
|
+
#self.ui.calTree.clearSelection()
|
|
230
|
+
if FlagAbove:
|
|
231
|
+
if selectedItems: row=indexes[0]
|
|
232
|
+
else: row=0
|
|
233
|
+
firstItemToScroll=self.ui.calTree.cutted_items[0]
|
|
234
|
+
lastItemToScroll=self.ui.calTree.cutted_items[-1]
|
|
235
|
+
else:
|
|
236
|
+
if selectedItems: row=indexes[-1]+1
|
|
237
|
+
else: row=self.ui.calTree.topLevelItemCount()
|
|
238
|
+
firstItemToScroll=self.ui.calTree.cutted_items[-1]
|
|
239
|
+
lastItemToScroll=self.ui.calTree.cutted_items[0]
|
|
240
|
+
self.ui.calTree.insertItems2List(row,self.ui.calTree.cutted_items,True,FlagSignal=False)
|
|
241
|
+
if not self.ui.calTree.FlagCutted:
|
|
242
|
+
self.cutItems(self.ui.calTree.cutted_items)
|
|
243
|
+
self.ui.calTree.pasteLists(row)
|
|
244
|
+
|
|
245
|
+
self.ui.calTree.scrollToItem(firstItemToScroll)
|
|
246
|
+
self.ui.calTree.scrollToItem(lastItemToScroll)
|
|
247
|
+
if FlagResizeHeader: self.ui.calTree.resizeColumnToContents(0)
|
|
248
|
+
self.ui.calTree.setVisible(True)
|
|
249
|
+
self.ui.calTree.setFocus()
|
|
250
|
+
|
|
251
|
+
self.copyListsFromTree()
|
|
252
|
+
|
|
253
|
+
def button_paste_above_action(self):
|
|
254
|
+
self.button_paste_above_below_action(FlagAbove=True)
|
|
255
|
+
|
|
256
|
+
def button_paste_below_action(self):
|
|
257
|
+
self.button_paste_above_below_action(FlagAbove=False)
|
|
258
|
+
|
|
259
|
+
def button_clean_action(self):
|
|
260
|
+
self.ui.calTree.setVisible(False)
|
|
261
|
+
self.nullList()
|
|
262
|
+
self.ui.calTree.setVisible(True)
|
|
263
|
+
|
|
264
|
+
def nullList(self):
|
|
265
|
+
self.ui.calTree.nimg=0
|
|
266
|
+
self.ui.calTree.calList=[]
|
|
267
|
+
self.ui.calTree.calEx=[]
|
|
268
|
+
self.ui.calTree.itemList[0]=self.ui.calTree.calList
|
|
269
|
+
self.ui.calTree.itemList[1]=self.ui.calTree.calEx
|
|
270
|
+
self.ui.calTree.setLists()
|
|
271
|
+
|
|
272
|
+
self.copyListsFromTree()
|
|
273
|
+
|
|
274
|
+
#******************** Actions
|
|
275
|
+
def button_CalVi_set(self):
|
|
276
|
+
self.ui.button_CalVi.setChecked(self.CALpar.FlagCalVi)
|
|
277
|
+
|
|
278
|
+
#*************************************************** Calibration List
|
|
279
|
+
#******************** Actions
|
|
280
|
+
def calibration_list_selection(self):
|
|
281
|
+
selectedItems=self.ui.calTree.selectedItems()
|
|
282
|
+
self.CALpar.row=self.ui.calTree.indexOfTopLevelItem(selectedItems[-1]) if len(selectedItems) else -1
|
|
283
|
+
return
|
|
284
|
+
|
|
285
|
+
#******************** Settings
|
|
286
|
+
def calibration_list_set(self):
|
|
287
|
+
if self.CALpar.isDifferentFrom(self.ui.calTree,fields=['calList','calEx']):
|
|
288
|
+
self.ui.calTree.itemList[0]=self.ui.calTree.calList=deep_duplicate(self.CALpar.calList)
|
|
289
|
+
self.ui.calTree.itemList[1]=self.ui.calTree.calEx=deep_duplicate(self.CALpar.calEx)
|
|
290
|
+
self.ui.calTree.setLists()
|
|
291
|
+
self.CALpar.calEx=deep_duplicate(self.ui.calTree.calEx)
|
|
292
|
+
|
|
293
|
+
if self.CALpar.row>-1 and self.CALpar.row<len(self.CALpar.calList):
|
|
294
|
+
self.ui.calTree.topLevelItem(self.CALpar.row).setSelected(True)
|
|
295
|
+
|
|
296
|
+
#*************************************************** Context Menu
|
|
297
|
+
def contextMenuEvent(self, event):
|
|
298
|
+
menu=QMenu(self)
|
|
299
|
+
name=[]
|
|
300
|
+
act=[]
|
|
301
|
+
fun=[]
|
|
302
|
+
for nb in self.calibrationTreeButtons:
|
|
303
|
+
if '-' not in nb and '|' not in nb:
|
|
304
|
+
b:QPushButton=getattr(self.ui,'button_'+nb)
|
|
305
|
+
if b.isVisible() and b.isEnabled():
|
|
306
|
+
if hasattr(self,'button_'+nb+'_callback'):
|
|
307
|
+
name.append(nb)
|
|
308
|
+
act.append(QAction(b.icon(),toPlainText(b.toolTip().split('.')[0]),self))
|
|
309
|
+
menu.addAction(act[-1])
|
|
310
|
+
callback=getattr(self,'button_'+nb+'_callback')
|
|
311
|
+
fun.append(callback)
|
|
312
|
+
elif '|' in nb:
|
|
313
|
+
if len(act): menu.addSeparator()
|
|
314
|
+
|
|
315
|
+
if len(act):
|
|
316
|
+
action = menu.exec(self.mapToGlobal(event.pos()))
|
|
317
|
+
for nb,a,f in zip(name,act,fun):
|
|
318
|
+
if a==action:
|
|
319
|
+
TABpar.FlagSettingPar=False
|
|
320
|
+
f()
|
|
321
|
+
|
|
322
|
+
if __name__ == "__main__":
|
|
323
|
+
import sys
|
|
324
|
+
app=QApplication.instance()
|
|
325
|
+
if not app:app = QApplication(sys.argv)
|
|
326
|
+
app.setStyle('Fusion')
|
|
327
|
+
object = Calibration_Tab(None)
|
|
328
|
+
object.show()
|
|
329
|
+
app.exec()
|
|
330
|
+
app.quit()
|
|
331
|
+
app=None
|
PaIRS_UniNa/Changes.txt
CHANGED
|
@@ -1,10 +1,142 @@
|
|
|
1
|
-
|
|
1
|
+
********* Changes in version 0.2.8 (2025.11.14) **********
|
|
2
|
+
Bug fixes:
|
|
3
|
+
- corrected a bug in the z-vorticity computation: velocity gradients were not properly converted to physical units, causing an error in the magnitude scales though not in the qualitative distributions;
|
|
4
|
+
- corrected the display of maps of output variables and vector fields in Vis to ensure proper alignment across option changes;
|
|
5
|
+
- fixed issues related to path handling in the batch-folder copy and other modules: paths are no longer relativized, avoiding inconsistent behavior across different operating systems or different.
|
|
6
|
+
|
|
7
|
+
New features:
|
|
8
|
+
- added new options in the batch folder-copy tool to automatically remove image pairs where one or more files are missing in the destination folders and to fully re-scan the destination folders for cases in which mismatches in the image sets may occur;
|
|
9
|
+
- extended the existing functionality in Vis for loading and visualizing past results located under the specified output path and name root: when available, the corresponding saved log file is now automatically loaded and displayed in the Log tab.
|
|
10
|
+
|
|
11
|
+
User-interface enhancements:
|
|
12
|
+
- improved the naming logic for duplicated processes: copied processes are now assigned consistent incremental suffixes;
|
|
13
|
+
- improved the example-image tree and the behavior of the step spin box in the Image Import Tool (minimum step is now 1);
|
|
14
|
+
- refined the behavior of the import button: it is now always enabled, and when no changes in the image list are detected upon importing, the user simply receives a warning message;
|
|
15
|
+
- improved the behaviour of the list of path completers in the Input tabs;
|
|
16
|
+
- in Vis, resizing settings and automatic level-reset options are no longer global but apply individually per each step.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
********* Changes in version 0.2.7 (2025.10.13) **********
|
|
20
|
+
Bug fixes:
|
|
21
|
+
- resolved an issue related to visulazion of streamlines when the image is shown in pixel units and a custom resolution is specified (in previous versions, streamlines were always represented in physical units);
|
|
22
|
+
- corrected the update of reprojection errors in CalVi when the control point grid is expanded after a calibration. Each new control point now has its error recalculated and plotted, providing a correct view of the extrapolation error;
|
|
23
|
+
- fixed the automatic resize/reshape behavior specified in the Output tab: when an image transformation is assigned, it is now preserved even if the automatic reshape button is active.
|
|
24
|
+
|
|
25
|
+
User-interface enhancements:
|
|
26
|
+
- changed the behavior of the Vis button for restricting view on the interrogation window area: clicking it now opens a popup menu that allows users to select the desired interrogation-window size to focus on among all iterations of the process;
|
|
27
|
+
- names of processes duplicated in the process tree are now automatically updated to avoid conflicts: if a name already exists, the new one is appended with an incremental suffix;
|
|
28
|
+
- improved interaction with editable input fields: when hovering the highlighted style is displayed correctly, the text cursor now appears exactly where clicked and the background color is properly restored when leaving the field.
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
********* Changes in version 0.2.6 (2025.09.06) **********
|
|
33
|
+
Bug fixes:
|
|
34
|
+
- fixed bugs related to process tree management.
|
|
35
|
+
|
|
36
|
+
User-interface enhancements:
|
|
37
|
+
- enhanced release check using SSL for reliable retrieval of the latest version.
|
|
38
|
+
|
|
39
|
+
Distribution:
|
|
40
|
+
- ready-to-use executables of PaIRS are now available!
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
********* Changes in version 0.2.5 (2025.07.28) **********
|
|
45
|
+
Bug fixes:
|
|
46
|
+
- fixed bugs in launching PIV and stereoscopic PIV processes in special cases;
|
|
47
|
+
- fixed tooltip crash introduced by PySide 6.9;
|
|
48
|
+
- corrected package import errors and context menu bugs;
|
|
49
|
+
- resolved multiple visual glitches in image tree selection and map visualization.
|
|
50
|
+
|
|
51
|
+
New features:
|
|
52
|
+
- implemented version control of required Python packages with automatic compatibility check and warning;
|
|
53
|
+
- disparity maps are now automatically saved in the output folder and can be visualized in Vis;
|
|
54
|
+
- added support for restricting view in Vis based on interrogation window size and shifting the view window interactively.
|
|
55
|
+
|
|
56
|
+
User-interface enhancements:
|
|
57
|
+
- redesigned the execution logic of internal workers for improved control and robustness;
|
|
58
|
+
- improved formatting and display of coordinates and variable values when moving the cursor during map visualization;
|
|
59
|
+
- updated button labels and layout for clarity and consistency.
|
|
60
|
+
|
|
61
|
+
Distribution:
|
|
62
|
+
- Support for Python 3.9 has been discontinued;
|
|
63
|
+
- Python 3.13 builds have been successfully created and tested in Windows.
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
********* Changes in version 0.2.4 (2024.12.01) **********
|
|
68
|
+
Bug fixes:
|
|
69
|
+
- fixed critical bugs in process handling and calibration step (CalVi usage, closing PaIRS during CalVi operation, resetting steps while running);
|
|
70
|
+
- resolved issues with velocity field visualization and stereo-PIV streamline representation;
|
|
71
|
+
- fixed undo/redo functionality, image tree selection issues, logging errors and focus-out signal handling.
|
|
72
|
+
|
|
73
|
+
New features:
|
|
74
|
+
- extended Vis features, including reference frame system plotting and vorticity field visualization;
|
|
75
|
+
- introduced the ability to copy input and output information from other steps within the same process;
|
|
76
|
+
- introduced functionality to interrupt processing before it starts if issues are detected.
|
|
77
|
+
|
|
78
|
+
Performance improvements:
|
|
79
|
+
- optimized thread usage and resource management for PIV and stereo-PIV;
|
|
80
|
+
- streamlined process workflows, including faster and more reliable parameter updates.
|
|
81
|
+
|
|
82
|
+
User-interface enhancements:
|
|
83
|
+
- updated the CalVi Stop button to function as Save and improved its conditional display;
|
|
84
|
+
- improved handling of project/process information and added better feedback for user actions.
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
********* Changes in version 0.2.3 (2024.11.06) **********
|
|
89
|
+
- Fixed bug in the functionality for replicating processes with changed input folders introduced in version v0.2.2.
|
|
90
|
+
|
|
91
|
+
- Fixed bug in the compatibility check for the common region in disparity and stereoscopic PIV analysis steps.
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
********* Changes in version 0.2.2 (2024.10.15) **********
|
|
96
|
+
- [!!! Critical !!!] Fixed critical errors in the calculation of Reynolds stresses for stereoscopic PIV processes. Please consider reviewing the results from processes executed with version 0.2.1, as the w'w', u'w', and v'w' stresses were incorrectly calculated.
|
|
97
|
+
|
|
98
|
+
- Introduced the "Laser Equation Plane" box in the Output tab to specify the initial attempt in the disparity step or to independently assign the constant values of the laser plane during the stereoscopic PIV step.
|
|
99
|
+
|
|
100
|
+
- Introduced the "Copy process to loop over folders" button in the process tree. The latter allows the user to select multiple folders from the disk and replicate the process in the tree for each folder, automatically updating the input image path (specified in the Input tab) to match the path of each selected folder. This makes it extremely easy and fast to create a queue of processes for folders containing similar image sets.
|
|
101
|
+
|
|
102
|
+
- Resolved various bugs related to the copy and link functions of steps within the process tree. Buttons have been relocated to the Explorer, and additional functionality has been added to the context menu of the process tree items.
|
|
103
|
+
|
|
104
|
+
- Improved stability and interface performance.
|
|
105
|
+
|
|
106
|
+
- The guide of PaIRS-UniNa v0.2 is now available. Discover all the information you need for advanced software usage at https://www.pairs.unina.it/web/PaIRS-UniNa-v020-Guide.pdf.
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
********* Changes in version 0.2.1 (2024.07.08) **********
|
|
111
|
+
- Fixed bugs for Python 3.11 and 3.12.
|
|
112
|
+
|
|
113
|
+
- Fixed bugs related to use of historical minimum background image in disparity and image analysis steps.
|
|
114
|
+
|
|
115
|
+
- Fixed minor bugs.
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
********** Changes in 0.2.0 (2024.07.03) **********
|
|
120
|
+
- The latest version of PaIRS marks a departure from its predecessors. PaIRS now boasts a completely redesigned interface aimed at quick, simple, and efficient usability. Users bid farewell to Past, Present, and Future trees in favor of a new, more intuitive process management system (the Explorer): processes are organized into groups called projects and each project or process can be queued for later execution. Processes within each project can be modified until they are launched, and if necessary, reset and restarted from scratch. Each project also features a tree of deleted processes, allowing retrieval of outdated or abandoned processes.
|
|
121
|
+
|
|
122
|
+
- Currently, PaIRS includes four types of processes: preprocessing, PIV (Particle Image Velocimetry), calibration, and stereoscopic PIV. Each of these processes consists of one or more steps, which can be optional or mandatory. Similar to the first version of PaIRS, these steps are editable via PaIRS iconic tabs (Input, Output, Process, etc.). The process tree provides immediate visibility into the status of each step, further streamlining management.
|
|
123
|
+
|
|
124
|
+
- The calibration process grants access to CalVi (Calibration Visualizer). It is no longer necessary to launch the PaIRS calibration tool separately; everything is conveniently available within a single interface.
|
|
125
|
+
|
|
126
|
+
- The Input tab introduces a completely renewed image import list, offering users total freedom without the constraints of the past.
|
|
127
|
+
|
|
128
|
+
- Additionally, the Vis tab introduces some exciting new features, such as the ability to modify colormaps and vector/streamline colors, along with improved handling of image/result loading.
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
********** Changes in version 0.1.13 (2024.02.07) **********
|
|
2
133
|
- Fixed bugs related to navigation across the Past, Present and Future trees in the Queue tab.
|
|
134
|
+
|
|
3
135
|
- Minor changes in Vis.
|
|
4
136
|
|
|
5
137
|
|
|
6
138
|
|
|
7
|
-
********** Changes
|
|
139
|
+
********** Changes in version 0.1.12 (2024.02.02) **********
|
|
8
140
|
- PaIRS now includes the possibility to customize the windowing parameters for each iteration of a PIV process. The user can choose the windowing parameters for each iteration in the initial phase of the PIV process. This is possible by operating in the Windowing box at the bottom of the Process tab (visible only in the expert mode). A table widget has been added to this section, where the user can find all relevant information the windowing scheme for the PIV process and modify it iteration by iteration. By selecting the corresponding row of the table, the user can choose for the current iteration the type of weighting window to be used in the calculation of the absolute velocity and in the determination of the correlation map, if using the direct correlations or not and the maximum displacement allowed in the interrogation window. The latter parameter is an innovation of the present version itself and adds to the custom settings selectable by the user to build affordable validation strategies. In addition, in the table an indication about the stability of the windowing scheme for each iteration is reported. In conclusion, a larger degree of customization of the PIV process comes with the present modification of PaIRS.
|
|
9
141
|
|
|
10
142
|
- CalVi now fully supports optical camera calibration for transparent cylindrical geometries. In the version 0.1.10 this camera model was available only in debug mode for beta testers and developers, now it is fully working. The calibration of this camera model is however a delicate task and the user is referred to the CalVi guide for reliable experimental procedures that could be used in this direction.
|