Beispiel #1
0
def calculateDensities(pfile, limits=[120, 290, -45, 45], p_var=None, output='Density'):
    print(pfile)
    particles = Dataset(pfile, 'r')
    lon = particles.variables['lon']
    lat = particles.variables['lat']
    #active = particles.variables['active']
    time = particles.variables['time']
    if p_var is not None:
        p_var = particles.variables[p_var]

    #lon = lon[range(0,10000), :]
    #lat = lat[range(0,10000), :]
    #active = particles.variables['active']
    #time = time[range(0,10000), :]

    class ParticleTrack(object):
        lon = []
        lat = []
        def __init__(self, lon, lat, active=1):
            self.lon = lon
            self.lat = lat
            # for t in range(len(lon)):
            #     #if active[t] == 1:
            #     self.pos[t,:,0] = lon[t]
            #     self.pos[t,0,:] = lat[t]

    Particles = []

    print('Shape of data')
    print(np.shape(lon))
    print(np.shape(lat))
    print(np.shape(time))

    #print('Making particles...')
    #for p in range(len(lon[:,0])):
    #    Particles.append(ParticleTrack(lon[p,:], lat[p,:]))#, active))

    lons = np.arange(limits[0], limits[1]+1)
    lats = np.arange(limits[2], limits[3]+1)
    month_time = np.arange(time[0,1], time[0,-1], 30*24*60*60)
    blank = np.zeros([len(month_time), len(lats), len(lons)], dtype=np.float32)

    DensityField = Field("TagDensity", blank, lon=lons, lat=lats,
                         time=month_time)
    print(np.shape(DensityField.data))
    print('Calculating Density...')

    for t in range(len(month_time)):
        mid_month = month_time[t] + (30*24*60*60)/2
        mid_month_i = np.argmin(abs(time[0,:] - mid_month))
        print(mid_month_i)
        DensityField.data[t, :, :] = np.transpose(density(DensityField, lon, lat, mid_month_i, particle_val=p_var,
                                                          relative=True, area_scale=False))

    DensityField.write('%s_density' % output)
Beispiel #2
0
def calculateDensityRatio(dfiles, output):
    Fields = []
    for dfile in dfiles:
        print("Loading %s" % dfile)
        Fields.append(Field.from_netcdf(dfile,
                                        dimensions={'lon': 'nav_lon', 'lat': 'nav_lat', 'time': 'time_counter', 'data': 'TagDensity'},
                                        filenames=[dfile]))

    limits = [0, 0, 0, 0]
    limits[0] = np.max([field.lon[0] for field in Fields])
    limits[1] = np.min([field.lon[-1] for field in Fields])
    limits[2] = np.max([field.lat[0] for field in Fields])
    limits[3] = np.min([field.lat[-1] for field in Fields])
    #limits[1] = (np.min(field.lon[-1]) for field in Fields)
    #limits[2] = (np.max(field.lat[0]) for field in Fields)
    #limits[3] = (np.min(field.lat[-1]) for field in Fields)
    time_lim = [np.max([field.time[0] for field in Fields]), np.min([field.time[-1] for field in Fields])]
    #time_lim = [Fields[0].time[0], Fields[0].time[-1]]

    lon = np.arange(start=limits[0], stop=limits[1]+1, dtype=np.float32)
    lat = np.arange(start=limits[2], stop=limits[3]+1, dtype=np.float32)
    time = np.arange(time_lim[0], time_lim[1]+1, 30*24*60*60, dtype=np.float32)
    Ratio = np.zeros([len(time), len(lat), len(lon)], dtype=np.float32)
    print(limits)
    print(Fields[0].lon)
    print(Fields[1].lon)
    print(lon)
    print(Fields[0].lat)
    print(Fields[1].lat)
    print(lat)
    print(Fields[0].time)
    print(Fields[1].time)
    print(time)
    for t in range(len(time)):
        for x in range(len(lon)):
            for y in range(len(lat)):
                tagged = Fields[0].data[np.where(Fields[0].time == time[t])[0][0],
                                     np.where(Fields[0].lat == lat[y])[0][0],
                                     np.where(Fields[0].lon == lon[x])[0][0]]
                pop = Fields[1].data[np.where(Fields[1].time == time[t])[0][0],
                                     np.where(Fields[1].lat == lat[y])[0][0],
                                     np.where(Fields[1].lon == lon[x])[0][0]]
                #print('%s - %s' % (tagged, pop))
                if pop == 0:
                    Ratio[t, y, x] = 0
                else:
                    Ratio[t, y, x] = tagged/pop

    Ratios = Field('DensityRatio', Ratio, lon, lat, time=time)
    Ratios.write(filename=output)
Beispiel #3
0
def calculateDensityRatio(dfiles, output):
    Fields = []
    for dfile in dfiles:
        print("Loading %s" % dfile)
        Fields.append(
            Field.from_netcdf(dfile,
                              dimensions={
                                  'lon': 'nav_lon',
                                  'lat': 'nav_lat',
                                  'time': 'time_counter',
                                  'data': 'TagDensity'
                              },
                              filenames=[dfile]))

    limits = [0, 0, 0, 0]
    limits[0] = np.max([field.lon[0] for field in Fields])
    limits[1] = np.min([field.lon[-1] for field in Fields])
    limits[2] = np.max([field.lat[0] for field in Fields])
    limits[3] = np.min([field.lat[-1] for field in Fields])
    #limits[1] = (np.min(field.lon[-1]) for field in Fields)
    #limits[2] = (np.max(field.lat[0]) for field in Fields)
    #limits[3] = (np.min(field.lat[-1]) for field in Fields)
    time_lim = [
        np.max([field.time[0] for field in Fields]),
        np.min([field.time[-1] for field in Fields])
    ]
    #time_lim = [Fields[0].time[0], Fields[0].time[-1]]

    lon = np.arange(start=limits[0], stop=limits[1] + 1, dtype=np.float32)
    lat = np.arange(start=limits[2], stop=limits[3] + 1, dtype=np.float32)
    time = np.arange(time_lim[0],
                     time_lim[1] + 1,
                     30 * 24 * 60 * 60,
                     dtype=np.float32)
    Ratio = np.zeros([len(time), len(lat), len(lon)], dtype=np.float32)
    print(limits)
    print(Fields[0].lon)
    print(Fields[1].lon)
    print(lon)
    print(Fields[0].lat)
    print(Fields[1].lat)
    print(lat)
    print(Fields[0].time)
    print(Fields[1].time)
    print(time)
    for t in range(len(time)):
        for x in range(len(lon)):
            for y in range(len(lat)):
                tagged = Fields[0].data[np.where(
                    Fields[0].time == time[t])[0][0],
                                        np.where(
                                            Fields[0].lat == lat[y])[0][0],
                                        np.where(
                                            Fields[0].lon == lon[x])[0][0]]
                pop = Fields[1].data[np.where(Fields[1].time == time[t])[0][0],
                                     np.where(Fields[1].lat == lat[y])[0][0],
                                     np.where(Fields[1].lon == lon[x])[0][0]]
                #print('%s - %s' % (tagged, pop))
                if pop == 0:
                    Ratio[t, y, x] = 0
                else:
                    Ratio[t, y, x] = tagged / pop

    Ratios = Field('DensityRatio', Ratio, lon, lat, time=time)
    Ratios.write(filename=output)