Fri 29 Nov 2024 04:30:50 PM CET
This commit is contained in:
		
							parent
							
								
									c39ce78b78
								
							
						
					
					
						commit
						2867e27291
					
				
							
								
								
									
										198
									
								
								src/SimNDT/run_setup/snapshots.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										198
									
								
								src/SimNDT/run_setup/snapshots.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,198 @@ | ||||||
|  | __author__ = 'Miguel Molero' | ||||||
|  | 
 | ||||||
|  | import os | ||||||
|  | import sys | ||||||
|  | import numpy as np | ||||||
|  | # import matplotlib.pyplot as plt | ||||||
|  | from  scipy.misc import imsave | ||||||
|  | from scipy.io import savemat | ||||||
|  | 
 | ||||||
|  | import math | ||||||
|  | 
 | ||||||
|  | class SnapShots: | ||||||
|  |     def __init__(self, Enable=False, Extension='.png', Step=200, Filename=None, File_path = None, dB=60, Color=0,  | ||||||
|  |                        Field = 0, | ||||||
|  |                        enableFields=False, | ||||||
|  |                        enableSignals=False, | ||||||
|  |                        enableImages=False, | ||||||
|  |                        enableNumPy=False, | ||||||
|  |                        enableVolume=False, | ||||||
|  |                        enableView=False, | ||||||
|  |                        sensorShape = [], | ||||||
|  |                        sensorPlacement = [], | ||||||
|  |                        sensorSize = 0): | ||||||
|  | 
 | ||||||
|  |         self.IsEnable = Enable | ||||||
|  |         self.Extension = Extension | ||||||
|  |         self.Step = Step | ||||||
|  |         self.Filename = Filename | ||||||
|  |         self.File_path = File_path | ||||||
|  |         self.DB = dB | ||||||
|  |         self.Color = Color | ||||||
|  |         self.Field = Field | ||||||
|  |         self.enableFields   = enableFields | ||||||
|  |         self.enableSignals  = enableSignals | ||||||
|  |         self.enableImages   = enableImages | ||||||
|  |         self.enableNumPy    = enableNumPy | ||||||
|  |         self.enableVolume   = enableVolume | ||||||
|  |         self.enableView     = enableView | ||||||
|  |         self.sensorShape    = sensorShape | ||||||
|  |         self.sensorPlacement = sensorPlacement | ||||||
|  |         self.sensorSize      = sensorSize | ||||||
|  |         self.volF = [] | ||||||
|  |         self.volS = [] | ||||||
|  |         self.volP = [] | ||||||
|  | 
 | ||||||
|  |         print("SnapShots Field="+str(Field)+" enableNumPy="+str(enableNumPy)+" enableVolume="+str(enableVolume)+ " enableSignals="+str(enableSignals)) | ||||||
|  |         # if self.File_path does not exist, create it | ||||||
|  |         if not os.path.exists(self.File_path): | ||||||
|  |             os.makedirs(self.File_path) | ||||||
|  |                | ||||||
|  |     def save_fields(self, Fx, Fy, n): | ||||||
|  | 
 | ||||||
|  |         xn = Fx.shape[1] | ||||||
|  |         yn = Fx.shape[0] | ||||||
|  |         print('['+str(int(n / self.Step))+'] Saving fields x/y '+Label+' shape=('+str(xn)+','+str(yn)+')') | ||||||
|  |          | ||||||
|  |         if self.enableVolume: | ||||||
|  |           self.volF.append(np.array([Fx,Fy])) | ||||||
|  |         elif self.enableNumPy: | ||||||
|  |           FILE = self.Filename + ("-fields-%05d" % (int(n / self.Step)))           | ||||||
|  |           FILE_PATH = os.path.join(self.File_path, FILE) | ||||||
|  |           np.save(FILE_PATH,np.array([Fx,Fy])) | ||||||
|  |           print("Fields saved in numpy format at: ", FILE) | ||||||
|  |         else:   | ||||||
|  |           dict = {} | ||||||
|  |           dict['Vx'] = Fx | ||||||
|  |           dict['Vy'] = Fy | ||||||
|  |           FILE = self.Filename + ("-fields-%05d" % (int(n / self.Step))) + ".mat" | ||||||
|  |           savemat(FILE, dict) | ||||||
|  | 
 | ||||||
|  |     # @blab+ | ||||||
|  |     def save_signal(self, D , n, Label): | ||||||
|  |      | ||||||
|  |         self.Label = Label        | ||||||
|  |         xn = D.shape[1] | ||||||
|  |         yn = D.shape[0] | ||||||
|  |         print('['+str(int(n / self.Step))+'] Saving signal '+Label+' shape=('+str(xn)+','+str(yn)+') sensorShape='+str(self.sensorShape)) | ||||||
|  |         dx = 1 # sensor delta | ||||||
|  |         dy = 1 | ||||||
|  |         ox = 0 # offset | ||||||
|  |         oy = 0 | ||||||
|  |         if len(self.sensorShape) > 0: | ||||||
|  |           # size of sensor matrix | ||||||
|  |           sx = self.sensorShape[0] | ||||||
|  |           sy = self.sensorShape[1] | ||||||
|  |           S = np.zeros([sy,sx]) | ||||||
|  |           if len(self.sensorPlacement): | ||||||
|  |             p=self.sensorPlacement | ||||||
|  |             ox=p[0] | ||||||
|  |             dx=p[1] | ||||||
|  |             oy=p[2] | ||||||
|  |             dy=p[3] | ||||||
|  |           else: | ||||||
|  |             ox=dx=round(xn/(sx+1.0)) | ||||||
|  |             oy=dy=round(yn/(sy+1.0)) | ||||||
|  |           for x in range(0,sx): | ||||||
|  |             for y in range(0,sy): | ||||||
|  |               S[y,x]=D[oy+y*dy,ox+x*dx] | ||||||
|  |         else: | ||||||
|  |           S = D  | ||||||
|  | 
 | ||||||
|  |         if self.enableVolume: | ||||||
|  |           self.volS.append(np.copy(S)) | ||||||
|  |         elif self.enableNumPy: | ||||||
|  |           FILE = self.Filename + ("-signal-"+Label+"-%05d" % (int(n / self.Step))) | ||||||
|  |           FILE_PATH = os.path.join(self.File_path, FILE) | ||||||
|  |           np.save(FILE_PATH,S) | ||||||
|  |         else: | ||||||
|  |           FILE = self.Filename + ("-signal-"+Label+"-%05d" % (int(n / self.Step))) + ".mat" | ||||||
|  |           savemat(FILE, S) | ||||||
|  | 
 | ||||||
|  |     def save_power(self, Vx, Vy, n): | ||||||
|  |         | ||||||
|  |         S =  np.sqrt(Vx ** 2 + Vy ** 2) | ||||||
|  | 
 | ||||||
|  |         xn = S.shape[1] | ||||||
|  |         yn = S.shape[0] | ||||||
|  |         print('['+str(int(n / self.Step))+'] Saving power '+Label+' shape=('+str(xn)+','+str(yn)+')') | ||||||
|  |          | ||||||
|  |         if self.enableVolume: | ||||||
|  |           self.volP.append(np.copy(S)) | ||||||
|  |         elif self.enableNumPy: | ||||||
|  |           FILE = self.Filename + ("-power-%05d" % (int(n / self.Step))) | ||||||
|  |           FILE_PATH = os.path.join(self.File_path, FILE) | ||||||
|  |           np.save(FILE_PATH,S) | ||||||
|  |         else: | ||||||
|  |           FILE = self.Filename + ("-power-%05d" % (int(n / self.Step))) + ".mat" | ||||||
|  |           FILE_PATH = os.path.join(self.File_path, FILE) | ||||||
|  |           savemat(FILE_PATH, S) | ||||||
|  | 
 | ||||||
|  |     def save_fig(self, SV, n, idx=None): | ||||||
|  | 
 | ||||||
|  |         SV += self.DB | ||||||
|  |         ind = np.nonzero(SV < 0) | ||||||
|  |         SV[ind] = 0 | ||||||
|  |         SV /= np.max(SV) | ||||||
|  | 
 | ||||||
|  |         if self.Color == 0: | ||||||
|  |             cmap = plt.get_cmap('jet') | ||||||
|  |         elif self.Color == 1: | ||||||
|  |             cmap = plt.get_cmap('gray') | ||||||
|  | 
 | ||||||
|  |         try: | ||||||
|  |             _resize = False | ||||||
|  |             M, N = np.shape(SV) | ||||||
|  |             if M >= 2000: | ||||||
|  |                 _resize = True | ||||||
|  |             if N >= 2000: | ||||||
|  |                 _resize = True | ||||||
|  | 
 | ||||||
|  |             if _resize: | ||||||
|  |                 SVV = SV[::3, ::3] | ||||||
|  |                 rgba_img = cmap(SVV) | ||||||
|  |             else: | ||||||
|  |                 SVV = SV[::2, ::2] | ||||||
|  |                 rgba_img = cmap(SVV) | ||||||
|  | 
 | ||||||
|  |             rgb_img = np.delete(rgba_img, 3, 2) | ||||||
|  | 
 | ||||||
|  |             if idx is not None: | ||||||
|  |                 FILE = self.Filename + "_insp%d_" % idx + str(int(n / self.Step)) + self.Extension | ||||||
|  |             else: | ||||||
|  |                 FILE = self.Filename + ("%05d" % (int(n / self.Step))) + self.Extension | ||||||
|  |             FILE_PATH = os.path.join(self.File_path, FILE) | ||||||
|  |             imsave(FILE_PATH, rgb_img) | ||||||
|  | 
 | ||||||
|  |         except: | ||||||
|  |           raise ValueError("Too large Snapshots Size!!!!!!!!") | ||||||
|  | 
 | ||||||
|  |     def save_vol(self): | ||||||
|  |          | ||||||
|  |         if len(self.volF) > 0: | ||||||
|  |           if self.enableNumPy: | ||||||
|  |             FILE = self.Filename + '-fields' | ||||||
|  |             FILE_PATH = os.path.join(self.File_path, FILE) | ||||||
|  |             vol=np.array(self.volF) | ||||||
|  |             print("Saving numpy S-volume "+str(vol.shape)+" in "+FILE_PATH) | ||||||
|  |             np.save(FILE_PATH,vol) | ||||||
|  |             self.volF=[] | ||||||
|  |              | ||||||
|  |         if len(self.volS) > 0: | ||||||
|  |           if self.enableNumPy: | ||||||
|  |             FILE = self.Filename + '-signal-'+self.Label | ||||||
|  |             FILE_PATH = os.path.join(self.File_path, FILE) | ||||||
|  |             vol=np.array(self.volS) | ||||||
|  |             print("Saving numpy S-volume "+str(vol.shape)+" in "+FILE_PATH) | ||||||
|  |             np.save(FILE_PATH,vol) | ||||||
|  |             self.volS=[] | ||||||
|  |            | ||||||
|  |         if len(self.volP) > 0: | ||||||
|  |           if self.enableNumPy: | ||||||
|  |             FILE = self.Filename + '-power' | ||||||
|  |             FILE_PATH = os.path.join(self.File_path, FILE) | ||||||
|  |             vol=np.array(self.volP) | ||||||
|  |             print("Saving numpy S-volume "+str(vol.shape)+" in "+FILE_PATH) | ||||||
|  |             np.save(FILE_PATH,vol) | ||||||
|  |             self.volP=[] | ||||||
|  |          | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user