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)
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)
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)