[Python] Passare perametri a/tra classi

M@T perini.matteo a gmail.com
Mar 17 Maggio 2011 10:21:18 CEST


Ciao a tutti ho un problemino che non riesco a risolvere.
Ho queste 2 classi Cwt e Morlet:

class Cwt:
     fourierwl=1.00

     def _log2(self, x):
         # utility function to return (integer) log2
         return int( NP.log(float(x))/ NP.log(2.0)+0.0001 )

     def __init__(self, data, largestscale=1, notes=0, order=2, 
scaling='linear'):
         """
         Continuous wavelet transform of data

         data:    data in array to transform, length must be power of 2
         notes:   number of scale intervals per octave
         largestscale: largest scale as inverse fraction of length
                  of data array
                  scale = len(data)/largestscale
                  smallest scale should be >= 2 for meaningful data
         order:   Order of wavelet basis function for some families
         scaling: Linear or log
         """
         ndata = len(data)
         self.order=order
         self.scale=largestscale
         self._setscales(ndata,largestscale,notes,scaling)
         self.cwt= NP.zeros((self.nscale,ndata), NP.complex64)
         omega= 
NP.array(range(0,ndata/2)+range(-ndata/2,0))*(2.0*NP.pi/ndata)
         datahat=NP.fft.fft(data)
         self.fftdata=datahat
         for scaleindex in range(self.nscale):
             currentscale=self.scales[scaleindex]
             self.currentscale=currentscale  # for internal use
             s_omega = omega*currentscale
             psihat=self.wf(s_omega)
             psihat = psihat *  NP.sqrt(2.0*NP.pi*currentscale)
             convhat = psihat * datahat
             W    = NP.fft.ifft(convhat)
             self.cwt[scaleindex,0:ndata] = W
         return

     def _setscales(self,ndata,largestscale,notes,scaling):

         if scaling=="log":
             if notes<=0: notes=1
             # adjust nscale so smallest scale is 2
             noctave=self._log2( ndata/largestscale/2 )
             self.nscale=notes*noctave
             self.scales=NP.zeros(self.nscale,float)
             for j in range(self.nscale):
                 self.scales[j] = 
ndata/(self.scale*(2.0**(float(self.nscale-1-j)/notes)))
         elif scaling=="linear":
             nmax=ndata/largestscale/2
             self.scales=NP.arange(float(2),float(nmax))
             self.nscale=len(self.scales)
         else: raise ValueError, "scaling must be linear or log"
         return

     def getdata(self):
         return self.cwt
     def getcoefficients(self):
         return self.cwt
     def getpower(self):
         return (self.cwt* NP.conjugate(self.cwt)).real
     def getscales(self):
         return self.scales
     def getnscale(self):
         return self.nscale

class Morlet(Cwt):
     _omega0=5
     fourierwl=4* NP.pi/(_omega0+ NP.sqrt(2.0+_omega0**2))
     def wf(self, s_omega):
         H=(s_omega>0)*1.
     xhat=0.75112554*( NP.exp(-(s_omega-self._omega0)**2/2.0))*H
         return xhat

Da un altro file importo la classe Morlet con:
from nomefile import Morlet

e poi la richiamo col comando
cw=Morlet(A,maxscale,notes,scaling=scaling)

e tutto funziona!!

Però avrei la necessità di passare il parametro _omega0=xxx quando 
chiamo la classe.... tipo così:
cw=Morlet(A,maxscale,notes,scaling=scaling,_omega0=5)

ho fatto un po di prove ma non riesco.
Ogni aiuto è ben accetto.
Grazie
Matteo



Maggiori informazioni sulla lista Python