def eval(self,**kwargs): """ Evaluate the link Parameters ---------- applywav :boolean Apply waveform to H force : list Force the computation (['sig','ray','Ct','H']) AND save (replace previous computations) si_algo : str ('old'|'new') signature.run algo type 'old' : call propaths2 'new' : call procone2 alg : 5 | 7 version of run for signature si_mt: boolean Multi thread version of algo version 7 si_progress: bollean ( False) display progression bar for signatures diffraction : boolean (False) takes into consideration diffraction points ra_number_mirror_cf : int rays.to3D number of ceil/floor reflexions ra_ceil_height_meter: float, ceil height ra_vectorized: boolean (True) if True used the (2015 new) vectorized approach to determine 2drays Returns ------- ak : ndarray alpha_k tk : ndarray tau_k Notes ----- update self.ak and self.tk self.ak : ndarray alpha_k self.tk : ndarray tau_k Examples -------- .. plot:: :include-source: >>> from pylayers.simul.link import * >>> L=DLink(verbose=False) >>> aktk = L.eval() See Also -------- pylayers.antprop.signature pylayers.antprop.rays Experimental ------------ alg = 2015 | 20152 (best) vectorized signature research si_reverb : number of reverb in source/target cycle if alg=2015 """ defaults={ 'applywav':True, 'si_algo':'old', 'si_mt':False, 'si_progress':False, 'diffraction':False, 'ra_vectorized':False, 'ra_ceil_height_meter':3, 'ra_number_mirror_cf':1, 'force':[], 'alg':7, 'si_reverb':4, 'threshold':0.1, } for key, value in defaults.items(): if key not in kwargs: kwargs[key]=value if 'cutoff' not in kwargs: kwargs['cutoff']=self.cutoff else: self.cutoff=kwargs['cutoff'] if 'force' in kwargs: if not isinstance(kwargs['force'],list): if kwargs['force'] == True : kwargs['force'] = ['sig','ray','Ct','H'] else : kwargs['force'] = [] # must be placed after all the init !!!! self.checkh5() ############ # Signatures ############ Si = Signatures(self.L,self.ca,self.cb,cutoff=kwargs['cutoff']) if (self.dexist['sig']['exist'] and not ('sig' in kwargs['force'])): self.load(Si,self.dexist['sig']['grpname']) else : if kwargs['alg']==2015: TMP=Si.run2015(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if kwargs['alg']==20152: TMP=Si.run2015_2(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if kwargs['alg']==5: Si.run5(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], progress=kwargs['si_progress']) if kwargs['alg']==7: if kwargs['si_mt']==7: Si.run7mt(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) else : Si.run7(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) #Si.run6(diffraction=kwargs['diffraction']) # save sig self.save(Si,'sig',self.dexist['sig']['grpname'],force = kwargs['force']) self.Si = Si ############ # Rays ############ R = Rays(self.a,self.b) if self.dexist['ray']['exist'] and not ('ray' in kwargs['force']): self.load(R,self.dexist['ray']['grpname']) else : # perform computation ... # ... with vetorized ray evaluation approach if kwargs['ra_vectorized']: r2d = Si.raysv(self.a,self.b) # ... or with original and slow approach ( to be removed in a near future) else : r2d = Si.rays(self.a,self.b) R = r2d.to3D(self.L,H=self.L.maxheight, N=kwargs['ra_number_mirror_cf']) R.locbas(self.L) # ...and save self.save(R,'ray',self.dexist['ray']['grpname'],force = kwargs['force']) self.R = R if self.R.nray == 0: raise NameError('No rays have been found. Try to re-run the simulation with a higher S.cutoff ') ############ # Ctilde ############ C=Ctilde() if self.dexist['Ct']['exist'] and not ('Ct' in kwargs['force']): self.load(C,self.dexist['Ct']['grpname']) else : R.fillinter(self.L) # Ctilde... C = R.eval(self.fGHz) # ...save Ct self.save(C,'Ct',self.dexist['Ct']['grpname'],force = kwargs['force']) self.C = C ############ # H ############ H = Tchannel() if self.dexist['H']['exist'] and not ('H' in kwargs['force']): self.load(H,self.dexist['H']['grpname']) else : # Ctilde antenna Cl=C.locbas(Tt=self.Ta, Tr=self.Tb) #T channel H = C.prop2tran(a=self.Aa,b=self.Ab,Friis=True,debug=True) self.save(H,'H',self.dexist['H']['grpname'],force = kwargs['force']) self.H = H if kwargs['applywav']: if self.H.isFriis: self.ir = self.H.applywavB(self.wav.sf) else: self.ir = self.H.applywavB(self.wav.sfg) return self.H.ak, self.H.tk
def eval(self,**kwargs): """ evaluate the link Parameters ---------- applywav :boolean Apply waveform to H force : list Force the computation (['sig','ray','Ct','H']) AND save (replace previous computations) si_algo : str ('old'|'new') signature.run algo type 'old' : call propaths2 'new' : call procone2 alg : 5|7 version of run for signature si_mt: boolean Multi thread version of algo version 7 si_progress: bollean ( False) display progression bar for signatures diffraction : boolean (False) takes into consideration diffraction points ra_number_mirror_cf : int rays.to3D number of ceil/floor reflexions ra_ceil_H: float, (default []) ceil height . If [] : Layout max ceil height ra_vectorized: boolean (True) if True used the (2015 new) vectorized approach to determine 2drays Returns ------- ak : ndarray alpha_k tk : ndarray tau_k Notes ----- update self.ak and self.tk self.ak : ndarray alpha_k self.tk : ndarray tau_k Examples -------- .. plot:: :include-source: >>> from pylayers.simul.link import * >>> L=DLink(verbose=False) >>> aktk = L.eval() See Also -------- pylayers.antprop.signature pylayers.antprop.rays Experimental ------------ alg = 2015 | 20152 (best) vectorized signature research si_reverb : number of reverb in source/target cycle if alg=2015 """ defaults={ 'applywav':True, 'si_algo':'old', 'si_mt':False, 'si_progress':False, 'diffraction':True, 'ra_vectorized':True, 'ra_ceil_H':[], 'ra_number_mirror_cf':1, 'force':[], 'alg':7, 'si_reverb':4, 'threshold':0.1, 'verbose':[], } for key, value in defaults.items(): if key not in kwargs: kwargs[key]=value if 'cutoff' not in kwargs: kwargs['cutoff']=self.cutoff else: self.cutoff=kwargs['cutoff'] if 'force' in kwargs: if not isinstance(kwargs['force'],list): if kwargs['force'] == True : kwargs['force'] = ['sig','ray','Ct','H'] else : kwargs['force'] = [] if kwargs['verbose'] != []: self.verbose=kwargs['verbose'] # must be placed after all the init !!!! if self.verbose : print "checkh5" self.checkh5() ############ # Signatures ############ if self.verbose : print "Start Signatures" tic = time.time() Si = Signatures(self.L,self.ca,self.cb,cutoff=kwargs['cutoff']) if (self.dexist['sig']['exist'] and not ('sig' in kwargs['force'])): self.load(Si,self.dexist['sig']['grpname']) if self.verbose : print "load signature" else : if kwargs['alg']==2015: TMP=Si.run2015(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if self.verbose : print "algo 2015" if kwargs['alg']==20152: TMP=Si.run2015_2(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if self.verbose : print "algo 20152" if kwargs['alg']==5: Si.run5(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], progress=kwargs['si_progress']) if self.verbose : print "algo 5" if kwargs['alg']==7: if kwargs['si_mt']==7: Si.run7mt(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) if self.verbose : print "algo 7 , si_mt" else : Si.run7(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) if self.verbose : print "algo 7" #Si.run6(diffraction=kwargs['diffraction']) # save sig self.save(Si,'sig',self.dexist['sig']['grpname'],force = kwargs['force']) self.Si = Si toc = time.time() if self.verbose : print "Stop signature",toc-tic ############ # Rays ############ if self.verbose : print "Start Rays" tic = time.time() R = Rays(self.a,self.b) if self.dexist['ray']['exist'] and not ('ray' in kwargs['force']): self.load(R,self.dexist['ray']['grpname']) else : # perform computation ... # ... with vetorized ray evaluation approach if kwargs['ra_vectorized']: r2d = Si.raysv(self.a,self.b) # ... or with original and slow approach ( to be removed in a near future) else : r2d = Si.rays(self.a,self.b) if kwargs['ra_ceil_H'] == []: ceilheight = self.L.maxheight else: ceilheight = kwargs['ra_ceil_H'] R = r2d.to3D(self.L,H=ceilheight, N=kwargs['ra_number_mirror_cf']) R.locbas(self.L) # ...and save R.fillinter(self.L) C=Ctilde() C = R.eval(self.fGHz) self.save(R,'ray',self.dexist['ray']['grpname'],force = kwargs['force']) self.R = R toc = time.time() if self.verbose : print "Stop rays",toc-tic if self.R.nray == 0: raise NameError('No rays have been found. Try to re-run the simulation with a higher S.cutoff ') ############ # Ctilde ############ if self.dexist['Ct']['exist'] and not ('Ct' in kwargs['force']): C=Ctilde() self.load(C,self.dexist['Ct']['grpname']) else : if not hasattr(R,'I'): # Ctilde... C = R.eval(self.fGHz) # ...save Ct self.save(C,'Ct',self.dexist['Ct']['grpname'],force = kwargs['force']) self.C = C ############ # H ############ H = Tchannel() if self.dexist['H']['exist'] and not ('H' in kwargs['force']): self.load(H,self.dexist['H']['grpname']) else : # Ctilde antenna Cl=C.locbas(Tt=self.Ta, Tr=self.Tb) #T channel H = C.prop2tran(a=self.Aa,b=self.Ab,Friis=True,debug=True) self.save(H,'H',self.dexist['H']['grpname'],force = kwargs['force']) self.H = H if kwargs['applywav']: if self.H.isFriis: self.ir = self.H.get_cir(self.wav.sf) else: self.ir = self.H.get_cir(self.wav.sfg) return self.H.ak, self.H.tk
def eval(self,**kwargs): """ evaluate the link Parameters ---------- applywav :boolean Apply waveform to H force : list Force the computation (['sig','ray','Ct','H']) AND save (replace previous computations) alg : 1|'old'|'exp'|'exp2' version of run for signature si_progress: bollean ( False) display progression bar for signatures diffraction : boolean (False) takes into consideration diffraction points ra_number_mirror_cf : int rays.to3D number of ceil/floor reflexions ra_ceil_H: float, (default []) ceil height . If [] : Layout max ceil height If 0 : only floor reflection (outdoor case) If -1 : neither ceil nor floor reflection (2D case) ra_vectorized: boolean (True) if True used the (2015 new) vectorized approach to determine 2drays Returns ------- ak : ndarray alpha_k tk : ndarray tau_k Notes ----- update self.ak and self.tk self.ak : ndarray alpha_k self.tk : ndarray tau_k Examples -------- .. plot:: :include-source: >>> from pylayers.simul.link import * >>> L=DLink(verbose=False) >>> aktk = L.eval() See Also -------- pylayers.antprop.signature pylayers.antprop.rays Experimental ------------ alg = 2015 | 20152 (best) vectorized signature research si_reverb : number of reverb in source/target cycle if alg=2015 """ defaults={ 'applywav':True, 'si_progress':False, 'diffraction':True, 'ra_vectorized':True, 'ra_ceil_H':[], 'ra_number_mirror_cf':1, 'force':[], 'alg':1, 'si_reverb':4, 'threshold':0.1, 'verbose':[], } for key, value in defaults.items(): if key not in kwargs: kwargs[key]=value if 'cutoff' not in kwargs: kwargs['cutoff']=self.cutoff else: self.cutoff=kwargs['cutoff'] if 'force' in kwargs: if not isinstance(kwargs['force'],list): if kwargs['force'] == True : kwargs['force'] = ['sig','ray','Ct','H'] else : kwargs['force'] = [] if kwargs['verbose'] != []: self.verbose=kwargs['verbose'] # must be placed after all the init !!!! if self.verbose : print "checkh5" self.checkh5() ############ # Signatures ############ if self.verbose : print "Start Signatures" tic = time.time() Si = Signatures(self.L,self.ca,self.cb,cutoff=kwargs['cutoff']) if (self.dexist['sig']['exist'] and not ('sig' in kwargs['force'])): self.load(Si,self.dexist['sig']['grpname']) if self.verbose : print "load signature" else : if kwargs['alg']==1: Si.run(cutoff=kwargs['cutoff'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) if self.verbose : print "default algorithm" if kwargs['alg']=='exp': TMP=Si.run_exp(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if self.verbose : print "experimental (ex 2015)" if kwargs['alg']=='exp2': TMP=Si.run_exp2(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if self.verbose : print "algo exp2 ( ex 20152)" #Si.run6(diffraction=kwargs['diffraction']) # save sig self.save(Si,'sig',self.dexist['sig']['grpname'],force = kwargs['force']) self.Si = Si toc = time.time() if self.verbose : print "Stop signature",toc-tic ############ # Rays ############ if self.verbose : print "Start Rays" tic = time.time() R = Rays(self.a,self.b) if self.dexist['ray']['exist'] and not ('ray' in kwargs['force']): self.load(R,self.dexist['ray']['grpname']) else : # perform computation ... # ... with vetorized ray evaluation approach if kwargs['ra_vectorized']: r2d = Si.raysv(self.a,self.b) # ... or with original and slow approach ( to be removed in a near future) else : r2d = Si.rays(self.a,self.b) if kwargs['ra_ceil_H'] == []: ceilheight = self.L.maxheight else: ceilheight = kwargs['ra_ceil_H'] R = r2d.to3D(self.L,H=ceilheight, N=kwargs['ra_number_mirror_cf']) R.locbas(self.L) # ...and save R.fillinter(self.L) C = Ctilde() C = R.eval(self.fGHz) self.save(R,'ray',self.dexist['ray']['grpname'],force = kwargs['force']) self.R = R toc = time.time() if self.verbose : print "Stop rays",toc-tic if self.R.nray == 0: raise NameError('No rays have been found. Try to re-run the simulation with a higher S.cutoff ') ############ # Ctilde ############ if self.dexist['Ct']['exist'] and not ('Ct' in kwargs['force']): C=Ctilde() self.load(C,self.dexist['Ct']['grpname']) else : #if not hasattr(R,'I'): # Ctilde... # Find an other criteria in order to decide whether the R has # already been evaluated #pdb.set_trace() C = R.eval(self.fGHz) # ...save Ct self.save(C,'Ct',self.dexist['Ct']['grpname'],force = kwargs['force']) self.C = C ############ # H ############ H = Tchannel() if self.dexist['H']['exist'] and not ('H' in kwargs['force']): self.load(H,self.dexist['H']['grpname']) else : # Ctilde antenna Cl=C.locbas(Tt=self.Ta, Tr=self.Tb) #T channel H = C.prop2tran(a=self.Aa,b=self.Ab,Friis=True,debug=True) self.save(H,'H',self.dexist['H']['grpname'],force = kwargs['force']) self.H = H if kwargs['applywav']: if self.H.isFriis: self.ir = self.H.get_cir(self.wav.sf) else: self.ir = self.H.get_cir(self.wav.sfg) return self.H.ak, self.H.tk
def eval(self,**kwargs): """ Evaluate the link Parameters ---------- force : boolean Force the computation (even if obj already exists) AND save (replace previous computations) si_algo : str ('old'|'new') signature.run algo type ra_ceil_height_meter : int rays.to3D ceil height in meters ra_number_mirror_cf : int rays.to3D number of ceil/floor reflexions Returns ------- ak : ndarray alpha_k tk : ndarray tau_k Notes ----- update self.ak and self.tk self.ak : ndarray alpha_k self.tk : ndarray tau_k Examples -------- .. plot:: :include-source: >>> from pylayers.simul.link import * >>> L=DLink(verbose=False) >>> aktk = L.eval() See Also -------- pylayers.antprop.signature pylayers.antprop.rays """ defaults={ 'output':['sig','ray','Ct','H'], 'si_algo':'old', 'diffraction':False, 'ra_ceil_height_meter':3, 'ra_number_mirror_cf':1, 'force':False, 'alg':7, 'threshold':0.1, } for key, value in defaults.items(): if key not in kwargs: kwargs[key]=value self.checkh5() if 'cutoff' not in kwargs: kwargs['cutoff']=self.cutoff ############ # Signatures ############ Si = Signatures(self.L,self.ca,self.cb,cutoff=kwargs['cutoff']) if self.dexist['sig']['exist'] and not kwargs['force']: self.load(Si,self.dexist['sig']['grpname']) else : if kwargs['alg']==5: Si.run5(cutoff=kwargs['cutoff'],algo=kwargs['si_algo'],diffraction=kwargs['diffraction']) if kwargs['alg']==7: Si.run7(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold']) #Si.run6(diffraction=kwargs['diffraction']) # save sig self.save(Si,'sig',self.dexist['sig']['grpname'],force = kwargs['force']) self.Si = Si ############ # Rays ############ R = Rays(self.a,self.b) if self.dexist['ray']['exist'] and not kwargs['force']: self.load(R,self.dexist['ray']['grpname']) else : # perform computation ... r2d = Si.rays(self.a,self.b) R = r2d.to3D(self.L,H=kwargs['ra_ceil_height_meter'], N=kwargs['ra_number_mirror_cf']) R.locbas(self.L) # ...and save self.save(R,'ray',self.dexist['ray']['grpname'],force = kwargs['force']) self.R = R if self.R.nray == 0: raise NameError('No rays have been found. Try to re-run the simulation with a higher S.cutoff ') ############ # Ctilde ############ C=Ctilde() if self.dexist['Ct']['exist'] and not kwargs['force']: self.load(C,self.dexist['Ct']['grpname']) else : R.fillinter(self.L) # Ctilde... C = R.eval(self.fGHz) # ...save Ct self.save(C,'Ct',self.dexist['Ct']['grpname'],force = kwargs['force']) self.C = C ############ # H ############ H=Tchannel() if self.dexist['H']['exist'] and not kwargs['force']: self.load(H,self.dexist['H']['grpname']) else : # Ctilde antenna Cl=C.locbas(Tt=self.Ta, Tr=self.Tb) #T channel H = C.prop2tran(a=self.Aa,b=self.Ab,Friis=True) self.save(H,'H',self.dexist['H']['grpname'],force = kwargs['force']) self.H = H return self.H.ak, self.H.tk