Example #1
0
def synthetic(hsfile, spectrum, sr):
    curpath = os.path.dirname(os.path.abspath(__file__))
    with open(os.path.join(curpath,hsfile),'r') as f:
        raw = f.read().split('\n')

    data = [[float(r.split(',')[0]),float(r.split(',')[1])] for r in raw if r]

    """
    constants for spectrum and sea water level generation. we define them outside the loop to save some time
    """
    max_t = 3600                # maximum duration of time series
    nyq_f = sr/2                # nyquist frequency of spectra: highest frequency bin
    del_f = 1.0/max_t           # interval between frequency bins
    f = np.linspace(del_f,nyq_f,max_t)    # array containing all frequency bins
    t = np.linspace(0,max_t,max_t*sr)
    #t = np.reshape(t, (t.size,1))

    # lists of relevant hourly data
    hmean = []
    hmax = []
    hhts = []
    hht10 = []

    index = 0

    # jonswap
    if spectrum == 0:
        for dat in data:
            index += 1
            # generate spectrum
            S = wave_util.jonswap(dat[0], dat[1], 3600, f)
            # generate elevation data
            E = wave_util.ema(S, 0.5, del_f)
            # zerodowncross
            mean, max, hts, ht10 = wave_util.zerodown(E, sr)
            print index, [dat[0] - hts[0], dat[1] - hts[1]]
            # add to our hourly list
            #print file, mean, max, hts, ht10
            hmean.append(mean)
            hmax.append(max)
            hhts.append(hts)
            hht10.append(ht10)

    # wallops
    elif spectrum == 1:
        for dat in data:
            index += 1
            # generate spectrum
            S = wave_util.wallops(dat[0], dat[1], 10.0, f)
            # generate elevation data
            E = wave_util.ema(S, 0.5, del_f)
            # zerodowncross
            mean, max, hts, ht10 = wave_util.zerodown(E, sr)
            print index, [dat[0] - hts[0], dat[1] - hts[1]]
            # add to our hourly list
            #print file, mean, max, hts, ht10
            hmean.append(mean)
            hmax.append(max)
            hhts.append(hts)
            hht10.append(ht10)

    # custom spectrum -- based on bert-schneider
    elif spectrum == 2:
        for dat in data:
            index += 1
            #generate spectrum
            S = wave_util.genspec(hs=dat[0], ts=dat[1]-1., f=f, foffset=0, A=0.072, C=0)

            E = wave_util.ema(S, 0.5, del_f)
            mean, max, hts, ht10 = wave_util.zerodown(E, sr)
            print index, [dat[0] - hts[0], dat[1] - hts[1]]
            # add to our hourly list
            #print file, mean, max, hts, ht10
            hmean.append(mean)
            hmax.append(max)
            hhts.append(hts)
            hht10.append(ht10)

    data[:] = np.asarray(data)
    hhts[:] = np.asarray(hhts)
    print np.mean(data), np.mean(hhts)

    return (hmean, hmax, hhts, hht10, data)
Example #2
0
def synthetic(hsfile, spectrum, sr):
    curpath = os.path.dirname(os.path.abspath(__file__))
    with open(os.path.join(curpath, hsfile), 'r') as f:
        raw = f.read().split('\n')

    data = [[float(r.split(',')[0]), float(r.split(',')[1])] for r in raw if r]
    """
    constants for spectrum and sea water level generation. we define them outside the loop to save some time
    """
    max_t = 3600  # maximum duration of time series
    nyq_f = sr / 2  # nyquist frequency of spectra: highest frequency bin
    del_f = 1.0 / max_t  # interval between frequency bins
    f = np.linspace(del_f, nyq_f, max_t)  # array containing all frequency bins
    t = np.linspace(0, max_t, max_t * sr)
    #t = np.reshape(t, (t.size,1))

    # lists of relevant hourly data
    hmean = []
    hmax = []
    hhts = []
    hht10 = []

    index = 0

    # jonswap
    if spectrum == 0:
        for dat in data:
            index += 1
            # generate spectrum
            S = wave_util.jonswap(dat[0], dat[1], 3600, f)
            # generate elevation data
            E = wave_util.ema(S, 0.5, del_f)
            # zerodowncross
            mean, max, hts, ht10 = wave_util.zerodown(E, sr)
            print index, [dat[0] - hts[0], dat[1] - hts[1]]
            # add to our hourly list
            #print file, mean, max, hts, ht10
            hmean.append(mean)
            hmax.append(max)
            hhts.append(hts)
            hht10.append(ht10)

    # wallops
    elif spectrum == 1:
        for dat in data:
            index += 1
            # generate spectrum
            S = wave_util.wallops(dat[0], dat[1], 10.0, f)
            # generate elevation data
            E = wave_util.ema(S, 0.5, del_f)
            # zerodowncross
            mean, max, hts, ht10 = wave_util.zerodown(E, sr)
            print index, [dat[0] - hts[0], dat[1] - hts[1]]
            # add to our hourly list
            #print file, mean, max, hts, ht10
            hmean.append(mean)
            hmax.append(max)
            hhts.append(hts)
            hht10.append(ht10)

    # custom spectrum -- based on bert-schneider
    elif spectrum == 2:
        for dat in data:
            index += 1
            #generate spectrum
            S = wave_util.genspec(hs=dat[0],
                                  ts=dat[1] - 1.,
                                  f=f,
                                  foffset=0,
                                  A=0.072,
                                  C=0)

            E = wave_util.ema(S, 0.5, del_f)
            mean, max, hts, ht10 = wave_util.zerodown(E, sr)
            print index, [dat[0] - hts[0], dat[1] - hts[1]]
            # add to our hourly list
            #print file, mean, max, hts, ht10
            hmean.append(mean)
            hmax.append(max)
            hhts.append(hts)
            hht10.append(ht10)

    data[:] = np.asarray(data)
    hhts[:] = np.asarray(hhts)
    print np.mean(data), np.mean(hhts)

    return (hmean, hmax, hhts, hht10, data)
Example #3
0
def maximizem(sr):
    curpath = os.path.dirname(os.path.abspath(__file__))

    with open(os.path.join(curpath,'hts_data'),'r') as f:
        hts_raw = f.read().split('\n')
    dhts = [[float(r.split(',')[0]),float(r.split(',')[1])] for r in hts_raw if r]

    with open(os.path.join(curpath,'mean_data'),'r') as f:
        mean_raw = f.read().split('\n')
    dmean = [[float(r.split(',')[0]),float(r.split(',')[1])] for r in mean_raw if r]

    with open(os.path.join(curpath,'max_data'),'r') as f:
        max_raw = f.read().split('\n')
    dmax = [[float(r.split(',')[0]),float(r.split(',')[1])] for r in max_raw if r]

    with open(os.path.join(curpath,'ht10_data'),'r') as f:
        ht10_raw = f.read().split('\n')
    dht10 = [[float(r.split(',')[0]),float(r.split(',')[1])] for r in ht10_raw if r]

    """
    constants for spectrum and sea water level generation. we define them outside the loop to save some time
    """
    max_t = 3600                # maximum duration of time series
    nyq_f = sr/2                # nyquist frequency of spectra: highest frequency bin
    del_f = 1.0/max_t           # interval between frequency bins
    f = np.linspace(del_f,nyq_f,max_t)    # array containing all frequency bins
    t = np.linspace(0,max_t,max_t*sr)
    #t = np.reshape(t, (t.size,1))

    # list of hourly error rates
    emean = []
    emax = []
    ehts = []
    eht10 = []

    for m in xrange(2,10):
        # lists of relevant hourly data
        hmean = []
        hmax = []
        hhts = []
        hht10 = []

        index = 0
        for dat in dhts:
            index += 1
            # generate spectrum
            S = wave_util.wallops(dat[0], dat[1], m, f)
            # generate elevation data
            E = wave_util.ema(S, 0.5, del_f)
            # zerodowncross
            mean, max, hts, ht10 = wave_util.zerodown(E, sr)
            print index, [dat[0] - hts[0], dat[1] - hts[1]]
            # add to our hourly list
            #print file, mean, max, hts, ht10
            hmean.append(mean)
            hmax.append(max)
            hhts.append(hts)
            hht10.append(ht10)

        hhts[:] = np.asarray(hhts)
        hmean[:] = np.asarray(hmean)
        hmax[:] = np.asarray(hmax)
        hht10[:] = np.asarray(hht10)

        meandmean = np.mean(np.asarray(dmean))
        meandmax = np.mean(np.asarray(dmax))
        meandhts = np.mean(np.asarray(dhts))
        meandht10 = np.mean(np.asarray(dht10))

        emean.append((np.mean(hmean) - meandmean) / meandmean)
        emax.append((np.mean(hmax) - meandmax) / meandmax)
        ehts.append((np.mean(hhts) - meandhts) / meandhts)
        eht10.append((np.mean(hht10) - meandht10) / meandht10)
            
    return emean, emax, ehts, eht10
Example #4
0
def maximizem(sr):
    curpath = os.path.dirname(os.path.abspath(__file__))

    with open(os.path.join(curpath, 'hts_data'), 'r') as f:
        hts_raw = f.read().split('\n')
    dhts = [[float(r.split(',')[0]),
             float(r.split(',')[1])] for r in hts_raw if r]

    with open(os.path.join(curpath, 'mean_data'), 'r') as f:
        mean_raw = f.read().split('\n')
    dmean = [[float(r.split(',')[0]),
              float(r.split(',')[1])] for r in mean_raw if r]

    with open(os.path.join(curpath, 'max_data'), 'r') as f:
        max_raw = f.read().split('\n')
    dmax = [[float(r.split(',')[0]),
             float(r.split(',')[1])] for r in max_raw if r]

    with open(os.path.join(curpath, 'ht10_data'), 'r') as f:
        ht10_raw = f.read().split('\n')
    dht10 = [[float(r.split(',')[0]),
              float(r.split(',')[1])] for r in ht10_raw if r]
    """
    constants for spectrum and sea water level generation. we define them outside the loop to save some time
    """
    max_t = 3600  # maximum duration of time series
    nyq_f = sr / 2  # nyquist frequency of spectra: highest frequency bin
    del_f = 1.0 / max_t  # interval between frequency bins
    f = np.linspace(del_f, nyq_f, max_t)  # array containing all frequency bins
    t = np.linspace(0, max_t, max_t * sr)
    #t = np.reshape(t, (t.size,1))

    # list of hourly error rates
    emean = []
    emax = []
    ehts = []
    eht10 = []

    for m in xrange(2, 10):
        # lists of relevant hourly data
        hmean = []
        hmax = []
        hhts = []
        hht10 = []

        index = 0
        for dat in dhts:
            index += 1
            # generate spectrum
            S = wave_util.wallops(dat[0], dat[1], m, f)
            # generate elevation data
            E = wave_util.ema(S, 0.5, del_f)
            # zerodowncross
            mean, max, hts, ht10 = wave_util.zerodown(E, sr)
            print index, [dat[0] - hts[0], dat[1] - hts[1]]
            # add to our hourly list
            #print file, mean, max, hts, ht10
            hmean.append(mean)
            hmax.append(max)
            hhts.append(hts)
            hht10.append(ht10)

        hhts[:] = np.asarray(hhts)
        hmean[:] = np.asarray(hmean)
        hmax[:] = np.asarray(hmax)
        hht10[:] = np.asarray(hht10)

        meandmean = np.mean(np.asarray(dmean))
        meandmax = np.mean(np.asarray(dmax))
        meandhts = np.mean(np.asarray(dhts))
        meandht10 = np.mean(np.asarray(dht10))

        emean.append((np.mean(hmean) - meandmean) / meandmean)
        emax.append((np.mean(hmax) - meandmax) / meandmax)
        ehts.append((np.mean(hhts) - meandhts) / meandhts)
        eht10.append((np.mean(hht10) - meandht10) / meandht10)

    return emean, emax, ehts, eht10