def cruiseSelector(self, var,Cruisename): ''' Returns a profile list by selecting for variable (string) and Cruisename (string) Returns a profile list ''' iCruise = find_index(Cruisename, self.CRUISES) ivar = find_index(var, self.VARIABLES) values= self.DATA[ivar,:] good = (values < 1e+19) & (values > 0) ii = self.DATA[-1,:] == (iCruise+1) Selected = good & ii year = self.DATA[ 0,Selected] month = self.DATA[ 1,Selected] day = self.DATA[ 2,Selected] lat = self.DATA[ 3,Selected] lon = self.DATA[ 4,Selected] depth = self.DATA[ 5,Selected] dataset = self.DATA[-1,Selected] values = values[Selected] nValues=values.size TIME = np.zeros((nValues), dtype=np.int32) for i in range(nValues): time = datetime.datetime(year[i],month[i],day[i]) TIME[i] = time.toordinal() return self.profileGenerator(TIME, lon, lat, values, depth, dataset)
def stationSelector(self, var,stationname): ''' Returns a profile list by selecting for variable (string) and stationname(string) Returns a profile list ''' print('-------------------------------------------') print('NON ancora testato, potrebbe NON funzionare') print('-------------------------------------------') iStation= find_index(stationname, self.STATIONS) ivar = find_index(var, self.VARIABLES) values= self.DATA[ivar,:] good = (values < 1e+19) & (values > 0) ii = self.DATA[-1,:] == (iStation+1) Selected = good & ii year = self.DATA[ 0,Selected] month = self.DATA[ 1,Selected] day = self.DATA[ 2,Selected] lat = self.DATA[ 3,Selected] lon = self.DATA[ 4,Selected] depth = self.DATA[ 5,Selected] dataset = self.DATA[-1,Selected] values = values[Selected] nValues=values.size TIME = np.zeros((nValues), dtype=np.int32) for i in range(nValues): time = datetime.datetime(year[i],month[i],day[i]) TIME[i] = time.toordinal() return self.profileGenerator(TIME, lon, lat, values, depth, dataset)
def __init__(self): ''' Reads the NetCDF Dataset ''' self.filename="/gss/gss_work/DRES_OGS_BiGe/Observations/TIME_RAW_DATA/STATIC/Carbon/Dataset_Med_CarbSys.nc" self.DataExtractor = DatasetExtractor(self.filename) # DATA ELIMINATION in order to not duplicate values with nutrients dataset for cruisename in ['METEOR','METEOR51', 'METEOR95','PROSOPE']: iCruise = find_index(cruisename, self.DataExtractor.CRUISES) for var in ['nitrate','phosphate','silicate','oxygen']: ivar = find_index(var, self.DataExtractor.VARIABLES) ii = self.DataExtractor.DATA[-1,:] == (iCruise+1) self.DataExtractor.DATA[ivar,ii] = -999.0
def selector(self,var,T_int, region): ''' Returns a profile list by selecting for variable (string), T_int (TimeInterval object) region (region object) ''' ivar = find_index(var, self.VARIABLES) values= self.DATA[ivar,:] units = self.UNITS[ivar,:].tostring() if units =="\\mumol/kg": itemp = find_index('temp' , self.VARIABLES) ipsal = find_index('salinity', self.VARIABLES) idens = find_index('density' , self.VARIABLES) temp = self.DATA[itemp,:] sali = self.DATA[ipsal,:] pres = self.DATA[5,:] dens = self.DATA[idens,:] good_rho = (sali < 1.e+19 ) & (sali>0) & (temp < 1.e+19 ) & (temp>0) & (pres < 1.e+19 ) & (pres>0) t = T90conv(temp) n = len(values) calculated_rho = np.ones((n),np.float32)*np.nan assumed_density = np.ones((n),np.float32)*np.nan calculated_rho[good_rho] = seawater.dens(sali[good_rho],t[good_rho],pres[good_rho]) good_dens = (dens < 1.e+19 ) & (dens>0) for i in range(n): if good_dens[i]: assumed_density[i] = dens[i] else: if good_rho[i]: assumed_density[i] = calculated_rho[i] good = ~np.isnan(assumed_density) values[good] = values[good] * assumed_density[good] /1000. values[~good] = 1.e+20 good = (values < 1e+19) & (values > 0) values = values[good] year = self.DATA[ 0,good] month = self.DATA[ 1,good] day = self.DATA[ 2,good] lat = self.DATA[ 3,good] lon = self.DATA[ 4,good] depth = self.DATA[ 5,good] dataset = self.DATA[-1,good] nValues=values.size Selected = np.zeros((nValues,),dtype=np.bool) TIME = np.zeros((nValues), dtype=np.int32) for i in range(nValues): time = datetime.datetime(year[i],month[i],day[i]) TIME[i] = time.toordinal() if T_int.contains(time) & region.is_inside(lon[i], lat[i]): Selected[i] = True Time = TIME[Selected] Lon = lon[Selected] Lat = lat[Selected] values = values[Selected] depth = depth[Selected] dataset = dataset[Selected] return self.profileGenerator(Time, Lon, Lat, values, depth, dataset)