Ejemplo n.º 1
0
    def __init__(self):
        self.tau = 60
        self.width = 10
        
        self.y = np.zeros((2,self.tau))
        self.y[0] = self.y[1] = np.linspace(self.width/2+5, settings["size_y"] - self.width/2-5, self.tau)
        
        self.x = np.zeros((2,self.tau))
        self.x[0] = self.x[1] = np.linspace(self.width/2+5, settings["size_x"] - self.width/2-5, self.tau)

        
        mod_y0 = np.concatenate((self.y[0], np.random.uniform(self.width/2, settings["size_y"] - self.width/2, 1)))
        mod_y1 = np.concatenate((self.y[1], np.random.uniform(self.width/2, settings["size_y"] - self.width/2, 1)))
        
        mod_x0 = np.concatenate((self.x[0], np.random.uniform(self.width/2, settings["size_x"] - self.width/2, 1)))
        mod_x1 = np.concatenate((self.x[1], np.random.uniform(self.width/2, settings["size_x"] - self.width/2, 1)))
        
        x = np.concatenate((np.arange(self.tau), np.array([2*self.tau])))
        
        new_y0 = interpolate(x, mod_y0, np.arange(2*self.tau))
        new_y1 = interpolate(x, mod_y1, np.arange(2*self.tau))
        new_x0 = interpolate(x, mod_x0, np.arange(2*self.tau))
        new_x1 = interpolate(x, mod_x1, np.arange(2*self.tau))
        
        self.y = np.vstack((new_y0, new_y1))
        self.x = np.vstack((new_x0, new_x1))
        self.pointer = 0
Ejemplo n.º 2
0
 def get(self):
     if self.pointer >=self.tau:
         self.y = self.y[self.tau-1:-1]
         self.x = self.x[self.tau-1:-1]
     
         mod_y = np.concatenate((self.y, np.random.uniform(self.a_max/2, self.a_max, 1)))               
         mod_x = np.concatenate((self.x, np.random.uniform(self.a_max/2, self.size_x, 1)))
         
         x = np.concatenate((np.arange(self.tau), np.array([2*self.tau])))
     
         self.y = interpolate(x, mod_y, np.arange(2*self.tau))
         self.x = interpolate(x, mod_x, np.arange(2*self.tau))
         
         self.pointer = 0
         
     #left,right, top, bottom
     
     a = self.y[self.pointer]
     xk = self.x[self.pointer]
     
     
     Ul = t = self.a_max*(np.exp(-((np.arange(self.size_x) - xk)**2)/(2*self.sigma)) -0.1)
     for i in range(self.size_y-1): Ul = np.vstack((Ul, t))
     Vl = Wl = t = np.random.uniform(-1,1,(self.size_x, self.size_y))
     
     self.pointer = self.pointer + 1
     
     return (Ul.transpose(),Vl,Wl)
     
     
     
     
     
     
     
Ejemplo n.º 3
0
    def shift_freq(self, deltaf):
        if deltaf == 0: return
        if deltaf > 0:
            newFreq = self.ctrF + deltaf
            newSize = self.samples.size * newFreq / self.ctrF
            newSR = self.sampleRate * newSize / self.samples.size
            T = 1 / newSR
            x = np.linspace(0, 1, self.samples.size)
            new_x = np.linspace(0, 1, newSize)

            interp_r = interpolate(x, self.samples.real, new_x)
            interp_i = interpolate(x, self.samples.imag, new_x)

            out = (interp_r + i * interp_i) * np.exp(-i * T * deltaf * np.arange(interp_i.size))

            s = Signal(newFreq, newSR, out)
            return s
        if deltaf < 0:
            newFreq = self.ctrF + deltaf
            T = 1 / self.sampleRate

            newSize = self.samples.size * newFreq / self.ctrF
            newSR = self.sampleRate * newFreq / self.ctrF

            k = (np.arange(newSize) * self.ctrF / newFreq).astype(np.int)
            out = np.take(self.samples, k) * np.exp(-i * deltaf * T * np.arange(newSize))

            s = Signal(newFreq, newSR, out)
Ejemplo n.º 4
0
    def freqShift(self, newFreq):
         if newFreq <0: return
         if newFreq == self.ctrF: return
         if newFreq > self.ctrF:
             f2 = newFreq - self.ctrF

             newSize = self.samples.size *newFreq/self.ctrF
             newSR = self.sampleRate*newSize/self.samples.size
             T = 1/newSR
             x = np.linspace(0, 1, self.samples.size)
             new_x = np.linspace(0, 1, newSize)

             interp_r = interpolate(x, self.samples.real, new_x)
             interp_i = interpolate(x, self.samples.imag, new_x)

             out = (interp_r + i*interp_i)*np.exp(-i*T*f2*np.arange(interp_i.size))

             self.ctrF = newFreq
             self.sampleRate = newSR
             self.samples = out
             return out
         if newFreq < self.ctrF:
             f2 = self.ctrF - newFreq
             T = 1/self.sampleRate

             newSize = self.samples.size*newFreq/self.ctrF
             newSR = self.sampleRate*newFreq/self.ctrF

             k = (np.arange(newSize)*self.ctrF/newFreq).astype(np.int)
             out = np.take(self.samples, k)*np.exp(i*f2*T*np.arange(newSize))

             self.samples = out
             self.sampleRate = newSR
             self.ctrF = newFreq
             return out
Ejemplo n.º 5
0
    def __init__(self, size_x,size_y, a_max, sigma):
        self.tau = 60
        self.size_x = size_x
        self.size_y = size_y
        self.a_max = a_max
        self.sigma = sigma
        
        
        self.y = self.a_max*np.sin(np.linspace(-np.pi/2,np.pi/2,self.tau))
        self.x = np.linspace(0, self.size_x, self.tau)

        mod_y = np.concatenate((self.y, np.random.uniform(self.a_max/2, self.a_max, 1)))               
        mod_x = np.concatenate((self.x, np.random.uniform(self.a_max/2, self.size_x, 1)))
            
        x = np.concatenate((np.arange(self.tau), np.array([2*self.tau])))
        
        self.y = interpolate(x, mod_y, np.arange(2*self.tau))
        self.x = interpolate(x, mod_x, np.arange(2*self.tau))
        self.pointer = 0
Ejemplo n.º 6
0
def interpolate(track, delta, interpolation_type=None):
    """
    Interpolate the records in time to have a uniform time difference between
    records. Each of the input arrays represent the values for a single TC
    event. 
    
    :param track: :class:`Track` object containing all data for the track.
    :param delta: `float` time difference to interpolate the dataset to. Must be
                  positive.
    :param interpolation_type: Optional ['linear', 'akima'], specify the type
                               of interpolation used for the locations (i.e.
                               longitude and latitude) of the records.

    # FIXME: Need to address masking values - scipy.interpolate.interp1d
    handles numpy.ma masked arrays. 
    """
    
    day_ = [datetime(*x) for x in zip(track.Year, track.Month, 
                                      track.Day, track.Hour, 
                                      track.Minute)]
    timestep = timedelta(delta/24.)
    
    time_ = np.array([d.toordinal() + d.hour/24.0 for d in day_], dtype=float) 

    dt_ = 24.0 * np.diff(time_)
    dt = np.empty(track.Hour.size, dtype=float)
    dt[1:] = dt_

    # Convert all times to a time after initial observation:
    timestep = 24.0*(time_ - time_[0])

    newtime = np.arange(timestep[0], timestep[-1] + .01, delta)
    newtime[-1] = timestep[-1]
    _newtime = (newtime / 24.) + time_[0]

    newdates = num2date(_newtime)
    newdates = np.array([n.replace(tzinfo=None) for n in newdates])
    nid = track.trackId[0] * np.ones(newtime.size)

    # Find the indices of valid pressure observations:
    validIdx = np.where(track.CentralPressure < sys.maxint)[0]

    # FIXME: Need to address the issue when the time between obs is less 
    # than delta (e.g. only two obs 5 hrs apart, but delta = 6 hrs). 

    if len(track.data) <= 2:
        # Use linear interpolation only (only a start and end point given):
        nLon = interp1d(timestep, track.Longitude, kind='linear')(newtime)
        nLat = interp1d(timestep, track.Latitude, kind='linear')(newtime)

        if len(validIdx) == 2:
            npCentre = interp1d(timestep, 
                                track.CentralPressure, 
                                kind='linear')(newtime)
            nwSpd = interp1d(timestep, 
                             track.WindSpeed, 
                             kind='linear')(newtime)

        elif len(validIdx) == 1:
            # If one valid observation, assume no change and 
            # apply value to all times
            npCentre = np.ones(len(newtime)) * track.CentralPressure[validIdx]
            nwSpd = np.ones(len(newtime)) * track.WindSpeed[validIdx]

        else:
            npCentre = np.zeros(len(newtime))
            nwSpd = np.zeros(len(newtime))

        npEnv = interp1d(timestep, track.EnvPressure, kind='linear')(newtime)
        nrMax = interp1d(timestep, track.rMax, kind='linear')(newtime)
        
    else:
        if interpolation_type=='akima':
            # Use the Akima interpolation method:
            try:
                import akima
            except ImportError:
                logger.exception( ("Akima interpolation module unavailable "
                                    " - default to scipy.interpolate") )
                nLon = splev(newtime, splrep(timestep, track.Longitude, s=0), der=0)
                nLat = splev(newtime, splrep(timestep, track.Latitude, s=0), der=0)

            else:
                nLon = akima.interpolate(timestep, track.Longitude, newtime)
                nLat = akima.interpolate(timestep, track.Latitude, newtime)
                
        elif interpolation_type=='linear':
            nLon = interp1d(timestep, track.Longitude, kind='linear')(newtime)
            nLat = interp1d(timestep, track.Latitude, kind='linear')(newtime)

        else:
            nLon = splev(newtime, splrep(timestep, track.Longitude, s=0), der=0)
            nLat = splev(newtime, splrep(timestep, track.Latitude, s=0), der=0)

        if len(validIdx) >= 2:
            # No valid data at the final new time,
            # would require extrapolation:
            firsttime = np.where(newtime >= timestep[validIdx[0]])[0][0]
            lasttime = np.where(newtime <= timestep[validIdx[-1]])[0][-1]

            if firsttime == lasttime:
                # only one valid observation:
                npCentre = np.zeros(len(newtime))
                nwSpd = np.zeros(len(newtime))
                npCentre[firsttime] = track.CentralPressure[validIdx[0]]
                nwSpd[firsttime] = track.WindSpeed[validIdx[0]]

            else:
                npCentre = np.zeros(len(newtime))
                nwSpd = np.zeros(len(newtime))
                _npCentre = interp1d(timestep[validIdx], 
                                     track.CentralPressure[validIdx], 
                                     kind='linear')(newtime[firsttime:lasttime])

                _nwSpd = interp1d(timestep[validIdx], 
                                  track.WindSpeed[validIdx], 
                                  kind='linear')(newtime[firsttime:lasttime])

                npCentre[firsttime:lasttime] = _npCentre
                nwSpd[firsttime:lasttime] = _nwSpd
                npCentre[lasttime] = _npCentre[-1]
                nwSpd[lasttime] = _nwSpd[-1]

        elif len(validIdx) == 1:
            npCentre = np.ones(len(newtime)) * track.CentralPressure[validIdx]
            nwSpd = np.ones(len(newtime)) * track.WindSpeed[validIdx]
        else:
            npCentre = np.zeros(len(newtime))
            nwSpd = np.zeros(len(newtime))

        npEnv = interp1d(timestep, track.EnvPressure, kind='linear')(newtime)
        nrMax = interp1d(timestep, track.rMax, kind='linear')(newtime)
    
    if len(nLat) >= 2:
        bear_, dist_ = latLon2Azi(nLat, nLon, 1, azimuth=0)
        nthetaFm = np.zeros(newtime.size, dtype=float)
        nthetaFm[:-1] = bear_
        nthetaFm[-1] = bear_[-1]
        dist = np.zeros(newtime.size, dtype=float)
        dist[:-1] = dist_
        dist[-1] = dist_[-1]
        nvFm = dist / delta
        
    else:
        nvFm = track.Speed[-1]
        nthetaFm = track.Bearing[-1]

    nYear = [date.year for date in newdates]
    nMonth = [date.month for date in newdates]
    nDay = [date.day for date in newdates]
    nHour = [date.hour for date in newdates]
    nMin = [date.minute for date in newdates]
    np.putmask(npCentre, npCentre > 10e+6, sys.maxint)
    np.putmask(npCentre, npCentre < 700, sys.maxint)

    newindex = np.zeros(len(newtime))
    newindex[0] = 1
    newTCID = np.ones(len(newtime)) * track.trackId[0]

    newdata = np.empty(len(newtime), 
                        dtype={
                               'names': TRACKFILE_COLS,
                               'formats': TRACKFILE_FMTS
                               } )

    for key, val in zip(TRACKFILE_COLS, 
                        [newindex, newTCID, nYear, nMonth, nDay, nHour, nMin,
                           newtime, newdates, nLon, nLat, nvFm, nthetaFm,  
                           npCentre, nwSpd, nrMax, npEnv]):
        newdata[key] = val
    newtrack = Track(newdata)
    newtrack.trackId = track.trackId
    newtrack.trackfile = track.trackfile

    return newtrack
Ejemplo n.º 7
0
 def get(self):
     if self.pointer >=self.tau:
         self.y = self.y[:,self.tau-1:-1]
         self.x = self.x[:,self.tau-1:-1]
     
         mod_y0 = np.concatenate((self.y[0], np.random.uniform(self.width/2+5, settings["size_y"] -self.width/2-5, 1)))
         mod_y1 = np.concatenate((self.y[1], np.random.uniform(self.width/2+5, settings["size_y"] -self.width/2-5, 1)))
     
         mod_x0 = np.concatenate((self.x[0], np.random.uniform(self.width/2+5, settings["size_x"] - self.width/2-5, 1)))
         mod_x1 = np.concatenate((self.x[1], np.random.uniform(self.width/2+5, settings["size_x"] - self.width/2-5, 1)))
     
         x = np.concatenate((np.arange(self.tau), np.array([2*self.tau])))
         
         new_y0 = interpolate(x, mod_y0, np.arange(2*self.tau))
         new_y1 = interpolate(x, mod_y1, np.arange(2*self.tau))
         new_x0 = interpolate(x, mod_x0, np.arange(2*self.tau))
         new_x1 = interpolate(x, mod_x1, np.arange(2*self.tau))
         self.y = np.vstack((new_y0, new_y1))
         self.x = np.vstack((new_x0, new_x1))
         
         print("hi")
         #self.y = self.y[self.tau-1:-1]
         #self.x = self.x[self.tau-1:-1]
         self.pointer = 0
         
     #left,right, top, bottom
     
     
     Ul = Ur = np.random.uniform(-10, -5, (settings["size_y"],settings["size_z"]))
     Vl = Wl = Vr = Wr = np.random.uniform(-3, 3, (settings["size_y"],settings["size_z"]))
     
     #Ur = np.random.uniform(-15, -10, (settings["size_y"],settings["size_z"]))
     #Vr = Wr = np.random.uniform(-3, 3, (settings["size_y"],settings["size_z"]))
     
     Vt = Vb = np.random.uniform(-10, -5, (settings["size_x"],settings["size_z"]))
     Ut = Wt = Ub = Wb = np.random.uniform(-3, 3, (settings["size_x"],settings["size_z"]))
     
     #left
     a= self.y[0, self.pointer]
     
     print(a)
     w = int(a + self.width/2) - int(a - self.width/2)
     Ul[int(a - self.width/2):int(a + self.width/2), :] = np.full((w, settings["size_z"]), 15)
     Vl[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(-3,3,(w, settings["size_z"]))
     Wl[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(-3,3,(w, settings["size_z"]))
     
     #right
     a= self.y[1, self.pointer]
     w = int(a + self.width/2) - int(a - self.width/2)
     Ur[int(a - self.width/2):int(a + self.width/2), :] = np.full((w, settings["size_z"]), 15)
     Vr[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(-3,3,(w, settings["size_z"]))
     Wr[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(-3,3,(w, settings["size_z"]))
     
     #top
     a= self.x[0, self.pointer]
     w = int(a + self.width/2) - int(a - self.width/2)
     Ut[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(-3,3,(w, settings["size_z"]))
     Vt[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(10,15,(w, settings["size_z"]))
     Wt[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(-3,3,(w, settings["size_z"]))
     
     #bottom
     a= self.x[1, self.pointer]
     w = int(a + self.width/2) - int(a - self.width/2)
     Ub[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(-3,3,(w, settings["size_z"]))
     Vb[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(10,15,(w, settings["size_z"]))
     Wb[int(a - self.width/2):int(a + self.width/2), :] = np.random.uniform(-3,3,(w, settings["size_z"]))
     
     self.pointer = self.pointer + 1
     
     return ((Ul,Vl,Wl),(Ur,Vr,Wr),(Ut,Vt,Wt),(Ub,Vb,Wb))
Ejemplo n.º 8
0
def interpolate(track, delta, interpolation_type=None):
    """
    Interpolate the records in time to have a uniform time difference between
    records. Each of the input arrays represent the values for a single TC
    event.

    :param track: :class:`Track` object containing all data for the track.
    :param delta: `float` time difference to interpolate the dataset to. Must be
                  positive.
    :param interpolation_type: Optional ['linear', 'akima'], specify the type
                               of interpolation used for the locations (i.e.
                               longitude and latitude) of the records.

    # FIXME: Need to address masking values - scipy.interpolate.interp1d
    handles numpy.ma masked arrays.
    """
    LOG.debug("Performing interpolation of TC track")
    if not hasattr(track, 'Datetime'):
        day_ = [
            datetime(*x) for x in zip(track.Year, track.Month, track.Day,
                                      track.Hour, track.Minute)
        ]
    else:
        day_ = track.Datetime

    timestep = timedelta(delta / 24.)
    try:
        time_ = np.array(
            [d.toordinal() + (d.hour + d.minute / 60.) / 24.0 for d in day_],
            dtype=float)
    except AttributeError:
        import cftime
        if isinstance(day_[0], cftime.DatetimeJulian):
            day__ = [d._to_real_datetime() for d in day_]
            time_ = np.array([
                d.toordinal() + (d.hour + d.minute / 60.) / 24. for d in day__
            ],
                             dtype=float)
        else:
            raise
    dt_ = 24.0 * np.diff(time_)
    dt = np.zeros(len(track.data), dtype=float)
    dt[1:] = dt_

    # Convert all times to a time after initial observation:
    timestep = 24.0 * (time_ - time_[0])

    newtime = np.arange(timestep[0], timestep[-1] + .01, delta)
    newtime[-1] = timestep[-1]
    _newtime = (newtime / 24.) + time_[0]
    newdates = num2date(_newtime)
    newdates = np.array([n.replace(tzinfo=None) for n in newdates])

    if not hasattr(track, 'Speed'):
        idx = np.zeros(len(track.data))
        idx[0] = 1
        # TODO: Possibly could change `np.mean(dt)` to `dt`?
        track.WindSpeed = maxWindSpeed(idx, np.mean(dt), track.Longitude,
                                       track.Latitude, track.CentralPressure,
                                       track.EnvPressure)
    # Find the indices of valid pressure observations:
    validIdx = np.where(track.CentralPressure < sys.maxsize)[0]

    # FIXME: Need to address the issue when the time between obs is less
    # than delta (e.g. only two obs 5 hrs apart, but delta = 6 hrs).

    if len(track.data) <= 3:
        # Use linear interpolation only (only a start and end point given):
        nLon = interp1d(timestep, track.Longitude, kind='linear')(newtime)
        nLat = interp1d(timestep, track.Latitude, kind='linear')(newtime)

        if len(validIdx) >= 2:
            npCentre = interp1d(timestep, track.CentralPressure,
                                kind='linear')(newtime)
            nwSpd = interp1d(timestep, track.WindSpeed, kind='linear')(newtime)

        elif len(validIdx) == 1:
            # If one valid observation, assume no change and
            # apply value to all times
            npCentre = np.ones(len(newtime)) * track.CentralPressure[validIdx]
            nwSpd = np.ones(len(newtime)) * track.WindSpeed[validIdx]

        else:
            npCentre = np.zeros(len(newtime))
            nwSpd = np.zeros(len(newtime))

        npEnv = interp1d(timestep, track.EnvPressure, kind='linear')(newtime)
        nrMax = interp1d(timestep, track.rMax, kind='linear')(newtime)

    else:
        if interpolation_type == 'akima':
            # Use the Akima interpolation method:
            try:
                import akima
            except ImportError:
                LOG.exception(("Akima interpolation module unavailable "
                               " - default to scipy.interpolate"))
                nLon = splev(newtime,
                             splrep(timestep, track.Longitude, s=0),
                             der=0)
                nLat = splev(newtime,
                             splrep(timestep, track.Latitude, s=0),
                             der=0)

            else:
                nLon = akima.interpolate(timestep, track.Longitude, newtime)
                nLat = akima.interpolate(timestep, track.Latitude, newtime)

        elif interpolation_type == 'linear':
            nLon = interp1d(timestep, track.Longitude, kind='linear')(newtime)
            nLat = interp1d(timestep, track.Latitude, kind='linear')(newtime)

        else:
            nLon = splev(newtime,
                         splrep(timestep, track.Longitude, s=0),
                         der=0)
            nLat = splev(newtime, splrep(timestep, track.Latitude, s=0), der=0)

        if len(validIdx) >= 2:
            # No valid data at the final new time,
            # would require extrapolation:
            firsttime = np.where(newtime >= timestep[validIdx[0]])[0][0]
            lasttime = np.where(newtime <= timestep[validIdx[-1]])[0][-1]

            if firsttime == lasttime:
                # only one valid observation:
                npCentre = np.zeros(len(newtime))
                nwSpd = np.zeros(len(newtime))
                npCentre[firsttime] = track.CentralPressure[validIdx[0]]
                nwSpd[firsttime] = track.WindSpeed[validIdx[0]]

            else:
                npCentre = np.zeros(len(newtime))
                nwSpd = np.zeros(len(newtime))
                _npCentre = interp1d(timestep[validIdx],
                                     track.CentralPressure[validIdx],
                                     kind='linear')(
                                         newtime[firsttime:lasttime])

                _nwSpd = interp1d(timestep[validIdx],
                                  track.Speed[validIdx],
                                  kind='linear')(newtime[firsttime:lasttime])

                npCentre[firsttime:lasttime] = _npCentre
                nwSpd[firsttime:lasttime] = _nwSpd
                npCentre[lasttime] = _npCentre[-1]
                nwSpd[lasttime] = _nwSpd[-1]

        elif len(validIdx) == 1:
            npCentre = np.ones(len(newtime)) * track.CentralPressure[validIdx]
            nwSpd = np.ones(len(newtime)) * track.WindSpeed[validIdx]
        else:
            npCentre = np.zeros(len(newtime))
            nwSpd = np.zeros(len(newtime))

        npEnv = interp1d(timestep, track.EnvPressure, kind='linear')(newtime)
        nrMax = interp1d(timestep, track.rMax, kind='linear')(newtime)

    if len(nLat) >= 2:
        bear_, dist_ = latLon2Azi(nLat, nLon, 1, azimuth=0)
        nthetaFm = np.zeros(newtime.size, dtype=float)
        nthetaFm[:-1] = bear_
        nthetaFm[-1] = bear_[-1]
        dist = np.zeros(newtime.size, dtype=float)
        dist[:-1] = dist_
        dist[-1] = dist_[-1]
        nvFm = dist / delta

    else:
        nvFm = track.Speed[-1]
        nthetaFm = track.Bearing[-1]

    nYear = [date.year for date in newdates]
    nMonth = [date.month for date in newdates]
    nDay = [date.day for date in newdates]
    nHour = [date.hour for date in newdates]
    nMin = [date.minute for date in newdates]
    np.putmask(npCentre, npCentre > 10e+6, sys.maxsize)
    np.putmask(npCentre, npCentre < 700, sys.maxsize)

    newindex = np.zeros(len(newtime))
    newindex[0] = 1
    newTCID = np.ones(len(newtime)) * track.trackId[0]

    newdata = np.empty(len(newtime),
                       dtype={
                           'names': TRACKFILE_COLS,
                           'formats': TRACKFILE_FMTS
                       })

    for key, val in zip(TRACKFILE_COLS, [
            newindex, newTCID, nYear, nMonth, nDay, nHour, nMin, newtime,
            newdates, nLon, nLat, nvFm, nthetaFm, npCentre, nwSpd, nrMax, npEnv
    ]):
        newdata[key] = val
    newtrack = Track(newdata)
    newtrack.trackId = track.trackId
    newtrack.trackfile = track.trackfile

    return newtrack
Ejemplo n.º 9
0
    idx = np.zeros(
        [K], np.int32)  # index location of the k window in the spline array
    idx[0] = 0
    for k in range(1, K):
        xspl = np.append(
            xspl,
            np.linspace(x[k - 1], x[k], num=100,
                        endpoint=False))  # 100 spline poins between windows
        idx[k] = len(xspl)
    xspl = np.append(xspl, x[-1])

    ### Integrate with bootstrapping
    for i in range(BootCyc):
        for k in range(K):
            y[k] = np.random.normal(m[k], s[k], 1)
        yspl = interpolate(x, y, xspl)
        for k in range(K):
            if aur == 'a' or aur == 'o' or aur == 'r':  ### Attach/Release
                intg[k, i] = np.trapz(
                    yspl[0:idx[k]], xspl[0:idx[k]]
                )  # not a negative because it's work by the system, not external.  test with w = -fd
            else:  # Umbrella Translate
                intg[k, i] = -1 * np.trapz(yspl[0:idx[k]], xspl[0:idx[k]])

    ### Write Integration
    datfile = open('int-' + aur + '.%03.0f.dat' % prg[p], 'w')
    for k in range(K):
        datfile.write("%15.7f %15.7f %15.7f\n" %
                      (x[k], np.mean(intg[k]), np.std(intg[k])))
    datfile.close()
Ejemplo n.º 10
0
def findInterpolatedPowerValues(timestamps, fileName):
    amperages, timestampsPower = extract_fields(fileName)
    i, j = findContainingRange(timestampsPower, timestamps)
    return interpolate(timestampsPower[i:j], amperages[i:j], timestamps)