From df8b191e54969d6a3c67feeb5173fa6e82428221 Mon Sep 17 00:00:00 2001 From: Pablo Vicente Munuera Date: Mon, 2 Feb 2026 15:56:48 +0100 Subject: [PATCH 1/5] Creating temporary folder for simulations --- src/pyVertexModel/algorithm/vertexModel.py | 59 ++++++++++++++++------ src/pyVertexModel/parameters/set.py | 23 +++++---- 2 files changed, 58 insertions(+), 24 deletions(-) diff --git a/src/pyVertexModel/algorithm/vertexModel.py b/src/pyVertexModel/algorithm/vertexModel.py index 176c616..56a640d 100644 --- a/src/pyVertexModel/algorithm/vertexModel.py +++ b/src/pyVertexModel/algorithm/vertexModel.py @@ -1,6 +1,7 @@ import logging import os import shutil +import tempfile from abc import abstractmethod from itertools import combinations from os.path import exists @@ -251,7 +252,7 @@ def __init__(self, set_option='wing_disc', c_set=None, create_output_folder=True self.tr = 0 self.numStep = 1 - def initialize(self, img_input=None): + def initialize(self, img_input=None): """ Initialize the geometry and the topology of the model. :param img_input: Optional. Either a filename (str) or a numpy array containing the image. @@ -434,9 +435,10 @@ def iterate_over_time(self): updating measures, and checking for convergence. :return: """ - temp_dir = os.path.join(self.set.OutputFolder, 'images') - if not os.path.exists(temp_dir): - os.makedirs(temp_dir) + if self.set.OutputFolder is not None: + temp_dir = os.path.join(self.set.OutputFolder, 'images') + if not os.path.exists(temp_dir): + os.makedirs(temp_dir) if self.set.Substrate == 1: self.Dofs.GetDOFsSubstrate(self.geo, self.set) @@ -620,16 +622,17 @@ def save_v_model_state(self, file_name=None): :param file_name: :return: """ - # Create VTK files for the current state - self.geo.create_vtk_cell(self.set, self.numStep, 'Edges') - self.geo.create_vtk_cell(self.set, self.numStep, 'Cells') - temp_dir = os.path.join(self.set.OutputFolder, 'images') - screenshot(self, temp_dir) - # Save Data of the current step - if file_name is None: - save_state(self, os.path.join(self.set.OutputFolder, 'data_step_' + str(self.numStep) + '.pkl')) - else: - save_state(self, os.path.join(self.set.OutputFolder, file_name + '.pkl')) + if self.set.OutputFolder is not None: + # Create VTK files for the current state + self.geo.create_vtk_cell(self.set, self.numStep, 'Edges') + self.geo.create_vtk_cell(self.set, self.numStep, 'Cells') + temp_dir = os.path.join(self.set.OutputFolder, 'images') + screenshot(self, temp_dir) + # Save Data of the current step + if file_name is None: + save_state(self, os.path.join(self.set.OutputFolder, 'data_step_' + str(self.numStep) + '.pkl')) + else: + save_state(self, os.path.join(self.set.OutputFolder, file_name + '.pkl')) def reset_noisy_parameters(self): """ @@ -1264,4 +1267,30 @@ def objective(lambdas): self.geo.update_measures() result = minimize(objective, method='TNC', x0=np.array([self.set.lambdaS1, self.set.lambdaS2]), options=options) logger.info(f'Found lambdaS1: {result.x[0]}, lambdaS2: {result.x[1]}') - return result.x[0], result.x[1] \ No newline at end of file + return result.x[0], result.x[1] + + def create_temporary_folder(self): + """ + Create temporary folder where store every require file during the simulation. + :return: + """ + if self.set.OutputFolder is not None: + logger.warning('Output folder already exists, using the existing one.') + return self.set.OutputFolder + + # Create temporary folder in PROJECT_DIRECTORY/Temp/ + temp_dir = tempfile.mkdtemp(dir=os.path.join(PROJECT_DIRECTORY, 'Temp')) + self.set.OutputFolder = temp_dir + logger.info(f'Created temporary output folder at: {temp_dir}') + + return temp_dir + + def clean_temporary_folder(self): + """ + Clean temporary folder after the simulation. + :return: + """ + if self.set.OutputFolder is not None and 'Temp' in self.set.OutputFolder: + shutil.rmtree(self.set.OutputFolder) + logger.info(f'Removed temporary output folder at: {self.set.OutputFolder}') + self.set.OutputFolder = None \ No newline at end of file diff --git a/src/pyVertexModel/parameters/set.py b/src/pyVertexModel/parameters/set.py index 9062c11..01f1b38 100644 --- a/src/pyVertexModel/parameters/set.py +++ b/src/pyVertexModel/parameters/set.py @@ -27,7 +27,7 @@ def __init__(self, mat_file=None): self.export_images = True self.cLineTension_external = None self.Contractility_external = False - self.initial_filename_state = 'Input/wing_disc_150.mat' + self.initial_filename_state = None self.delay_lateral_cables = 5.8 self.delay_purse_string = self.delay_lateral_cables self.ref_A0 = None @@ -191,14 +191,19 @@ def check_for_non_used_parameters(self): self.Remodel_stiffness_wound = 2 def redirect_output(self): - os.makedirs(self.OutputFolder, exist_ok=True) - os.makedirs(self.OutputFolder + '/images', exist_ok=True) - handler = logging.FileHandler(os.path.join(self.OutputFolder, 'log.out')) - handler.setLevel(logging.DEBUG) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') - handler.setFormatter(formatter) - logger.addHandler(handler) - logger.propagate = True + """ + Redirect the output to a log file in the output folder + :return: + """ + if self.OutputFolder is not None: + os.makedirs(self.OutputFolder, exist_ok=True) + os.makedirs(self.OutputFolder + '/images', exist_ok=True) + handler = logging.FileHandler(os.path.join(self.OutputFolder, 'log.out')) + handler.setLevel(logging.DEBUG) + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + handler.setFormatter(formatter) + logger.addHandler(handler) + logger.propagate = True def read_mat_file(self, mat_file): for param in mat_file.dtype.fields: From efc75dc5623fc27bad6724923ad1eb205af358ce Mon Sep 17 00:00:00 2001 From: Pablo Vicente Munuera Date: Mon, 2 Feb 2026 15:58:04 +0100 Subject: [PATCH 2/5] Missing Temp folder --- src/pyVertexModel/algorithm/vertexModel.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pyVertexModel/algorithm/vertexModel.py b/src/pyVertexModel/algorithm/vertexModel.py index 56a640d..6a22a83 100644 --- a/src/pyVertexModel/algorithm/vertexModel.py +++ b/src/pyVertexModel/algorithm/vertexModel.py @@ -1278,6 +1278,11 @@ def create_temporary_folder(self): logger.warning('Output folder already exists, using the existing one.') return self.set.OutputFolder + # Create Temp folder if it doesn't exist + if not os.path.exists(os.path.join(PROJECT_DIRECTORY, 'Temp')): + os.makedirs(os.path.join(PROJECT_DIRECTORY, 'Temp')) + logger.info(f'Created Temp folder at: {os.path.join(PROJECT_DIRECTORY, "Temp")}') + # Create temporary folder in PROJECT_DIRECTORY/Temp/ temp_dir = tempfile.mkdtemp(dir=os.path.join(PROJECT_DIRECTORY, 'Temp')) self.set.OutputFolder = temp_dir From eef5eb06bf030659491cb6ba20ad9bbb0c411765 Mon Sep 17 00:00:00 2001 From: Pablo Vicente Munuera Date: Mon, 2 Feb 2026 15:59:56 +0100 Subject: [PATCH 3/5] Updating gitingore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 6e76508..3f70b67 100644 --- a/.gitignore +++ b/.gitignore @@ -194,3 +194,5 @@ Input *.xlsx src/pyVertexModel/_version.py + +Temp/ From f08c5fab02df1925f87426293de8cd31cc337b7d Mon Sep 17 00:00:00 2001 From: Pablo Vicente Munuera Date: Mon, 2 Feb 2026 16:02:00 +0100 Subject: [PATCH 4/5] If filename does not exist nor image raise Excepction --- src/pyVertexModel/algorithm/vertexModel.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pyVertexModel/algorithm/vertexModel.py b/src/pyVertexModel/algorithm/vertexModel.py index 6a22a83..9d57d3e 100644 --- a/src/pyVertexModel/algorithm/vertexModel.py +++ b/src/pyVertexModel/algorithm/vertexModel.py @@ -260,8 +260,9 @@ def initialize(self, img_input=None): """ filename = os.path.join(PROJECT_DIRECTORY, self.set.initial_filename_state) - if not os.path.exists(filename): + if not os.path.exists(filename) and img_input is None: logging.error(f'File {filename} not found') + raise FileNotFoundError(f'File {filename} not found') base, ext = os.path.splitext(filename) if self.set.min_3d_neighbours is None: From 547654e34a3ed8fac084efe9eee032f8a22b7c2f Mon Sep 17 00:00:00 2001 From: Pablo Vicente Munuera Date: Mon, 2 Feb 2026 16:24:44 +0100 Subject: [PATCH 5/5] working with temp folder indtead --- src/pyVertexModel/geometry/geo.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pyVertexModel/geometry/geo.py b/src/pyVertexModel/geometry/geo.py index 801d2d1..c4697b1 100644 --- a/src/pyVertexModel/geometry/geo.py +++ b/src/pyVertexModel/geometry/geo.py @@ -366,7 +366,8 @@ def init_reference_cell_values(self, c_set): # Update lmin0 with the minimum value in lmin_values self.update_lmin0() - self.update_lmin0(default_value=find_lmin0_equal_target_gr(self, c_set)) + if '/Temp/' not in c_set.initial_filename_state: + self.update_lmin0(default_value=find_lmin0_equal_target_gr(self, c_set)) # Update BarrierTri0 self.update_barrier_tri0()