From fa3d73b2bbdde1caadae392dc520875ce8929f85 Mon Sep 17 00:00:00 2001 From: Alessandro Colombo Date: Tue, 5 Nov 2024 12:01:06 +0100 Subject: [PATCH] Adding conventional IPR for testing --- spring/alg_manager.py | 23 ++++++++- spring/mpr.py | 112 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 132 insertions(+), 3 deletions(-) diff --git a/spring/alg_manager.py b/spring/alg_manager.py index f033153..63f793e 100644 --- a/spring/alg_manager.py +++ b/spring/alg_manager.py @@ -140,7 +140,28 @@ class AlgManager: - + def get_sequence_ipr(self, gen_it, area = None, update_support=True): + + stab_seq = self.get_stabilization_sequence(gen_it) + main_seq = self.get_main_sequence(gen_it) + eval_seq = self.get_evaluation_sequence(gen_it) + full_seq = stab_seq + main_seq + + if update_support: + sw_seq = self.get_support_sequence(gen_it) + else: + sw_seq = [] + + alg_sequence = [] + + + for irep in range(self.repetitions): + alg_sequence += full_seq + sw_seq + + + alg_sequence += eval_seq + + return alg_sequence diff --git a/spring/mpr.py b/spring/mpr.py index be25048..32959c7 100644 --- a/spring/mpr.py +++ b/spring/mpr.py @@ -351,8 +351,6 @@ class MPR: if (save_every>0 and self.generation%save_every==0) or self.generation==self.settings['global']['generations']: self.result.save(self.settings['global']['workdir'], self.tag) - - #if self.verbose: print("Timing (s) --> Print: {:.2f}s , CrossPrep: {:.2f}s , Cross: {:.2f}s , SuppPix: {:.2f}s , IPR: {:.2f}s , Repl: {:.2f}s , total: {:.2f}s ({:.2f}s)".format(tprint, tcrossprep, tcross, tsuppix, tipr, trepl, ttot, (tprint+tcrossprep+tcross+tsuppix+tipr+trepl))) if self.checkstop(): raise StopRec @@ -435,6 +433,116 @@ class MPR: #############################################d + + + +def runIPR(self, save_every: int =-1): + try: + + self.stats = Stats() + self.SelectGPUs() + + ##############################d + self.print("### Running conventional IPR.") + + self.print("Initializing solver... ", end='', flush=True) + self.InitSolver() + self.print("Done.") + + self.print("Initializing algorithms... ", end='', flush=True) + self.InitIA() + self.print("Done.") + + self.print("Initializing population... ", end='', flush=True) + self.InitPop() + self.print("Done.") + + + + ##############################d + self.print("... Running main loop ...") + + self.solver.Evaluate(self.reconstructions) + self.sortedargs = np.argsort([rec.get_error() for rec in self.reconstructions]) + self.solver.set_sequence(self.algman.get_sequence_ipr(0, update_support = not self.refine)) + self.reconstructions = self.solver.Sequence(self.reconstructions) + + + self.generation = 0 + self.replcount=0 + + + self.sort() + self.get_best() + self.get_average() + self.save_result() + + while self.generation0 and self.generation%save_every==0) or self.generation==self.settings['global']['generations']: + self.result.save(self.settings['global']['workdir'], self.tag) + + if self.checkstop(): + raise StopRec + + self.print("Reconstruction completed") + self.setdone() + return self.result + + except StopRec: + self.print("Reconstruction interrupted.") + self.print("Saving reconstruction... ", end='') + self.result.save(self.settings['global']['workdir'], self.tag) + self.print('Done') + self.print("Empyting the communication queue... ", end='') + try: + while 1: + self.queue.get(timeout=0.5) + except queue.Empty: + pass + + self.print('Done') + self.setdone() + return self.result + except KeyboardInterrupt: + pass + + #############################################d #############################################d