Пример #1
0
 def test_wrong_date_validation(self):
     temp_file = NamedTemporaryFile()
     with pytest.raises(ValidTimeStampError):
         mira.mira2nc(f"{filepath}/20210102_0000.mmclx",
                      temp_file.name,
                      self.site_meta,
                      date="2021-01-03")
Пример #2
0
 def test_geolocation_from_source_file(self):
     temp_file = NamedTemporaryFile()
     meta_without_geolocation = {"name": "Kumpula"}
     mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name,
                  meta_without_geolocation)
     nc = netCDF4.Dataset(temp_file.name)
     for key in ("latitude", "longitude", "altitude"):
         assert key in nc.variables
         assert nc.variables[key][:] > 0
     nc.close()
Пример #3
0
 def test_global_attributes(self):
     mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx',
                  self.temp_file.name, self.site_meta)
     nc = netCDF4.Dataset(self.temp_file.name)
     assert nc.year == '2021'
     assert nc.month == '01'
     assert nc.day == '02'
     assert nc.Conventions == 'CF-1.7'
     assert nc.source == 'METEK MIRA-35'
     assert nc.location == 'The_station'
     assert nc.title == 'Radar file from The_station'
     assert nc.cloudnet_file_type == 'radar'
     nc.close()
Пример #4
0
 def test_variables(self):
     mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx',
                  self.temp_file.name, self.site_meta)
     nc = netCDF4.Dataset(self.temp_file.name)
     vars = ('Ze', 'v', 'width', 'ldr', 'SNR', 'time', 'range',
             'radar_frequency', 'nyquist_velocity', 'latitude', 'longitude',
             'altitude')
     for var in vars:
         assert var in nc.variables
     assert nc.variables['radar_frequency'][:].data == 35.5  # Hard coded
     assert abs(nc.variables['latitude'][:].data -
                50.9085) < 0.1  # From input file
     for var in ('altitude', 'longitude'):
         assert abs(nc.variables[var][:] -
                    self.site_meta[var]) < 0.1  # From user
     time = nc.variables['time'][:]
     assert min(time) > 0
     assert max(time) < 24
     nc.close()
Пример #5
0
 def test_uuid_from_user(self):
     uuid_from_user = '******'
     uuid = mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx',
                         self.temp_file.name,
                         self.site_meta,
                         uuid=uuid_from_user)
     nc = netCDF4.Dataset(self.temp_file.name)
     assert nc.file_uuid == uuid_from_user
     assert uuid == uuid_from_user
     nc.close()
Пример #6
0
 def test_uuid_from_user(self):
     temp_file = NamedTemporaryFile()
     uuid_from_user = "******"
     uuid = mira.mira2nc(f"{filepath}/20210102_0000.mmclx",
                         temp_file.name,
                         self.site_meta,
                         uuid=uuid_from_user)
     nc = netCDF4.Dataset(temp_file.name)
     assert nc.file_uuid == uuid_from_user
     assert uuid == uuid_from_user
     nc.close()
Пример #7
0
 def test_wrong_date_validation(self):
     with pytest.raises(ValueError):
         mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx',
                      self.temp_file.name,
                      self.site_meta,
                      date='2021-01-03')
Пример #8
0
 def test_correct_date_validation(self):
     mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx',
                  self.temp_file.name,
                  self.site_meta,
                  date='2021-01-02')
Пример #9
0
 def test_processing_of_one_nc_file(self):
     mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx',
                  self.temp_file.name, self.site_meta)
     nc = netCDF4.Dataset(self.temp_file.name)
     assert len(nc.variables['time'][:]) == self.n_time1
     nc.close()
Пример #10
0
 def test_processing_of_several_nc_files(self):
     mira.mira2nc(self.file_path, self.temp_file.name, self.site_meta)
     nc = netCDF4.Dataset(self.temp_file.name)
     assert len(nc.variables['time'][:]) == self.n_time1 + self.n_time2
     nc.close()
Пример #11
0
class TestMIRA2nc(Check):
    site_meta = {
        "name": "Punta Arenas",
        "latitude": 50,
        "longitude": 104.5,
        "altitude": 50
    }
    date = "2021-01-02"
    n_time1 = 146
    n_time2 = 145
    temp_file = NamedTemporaryFile()
    uuid = mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name,
                        site_meta)

    def test_variable_names(self):
        keys = {
            "Zh",
            "v",
            "width",
            "ldr",
            "SNR",
            "time",
            "range",
            "radar_frequency",
            "nyquist_velocity",
            "latitude",
            "longitude",
            "altitude",
            "zenith_angle",
            "azimuth_angle",
            "height",
            "rg0",
            "nave",
            "prf",
            "nfft",
        }
        assert set(self.nc.variables.keys()) == keys

    def test_variables(self):
        assert self.nc.variables[
            "radar_frequency"][:].data == 35.5  # Hard coded
        assert np.all(self.nc.variables["zenith_angle"][:].data) == 0

    def test_common_radar(self):
        radar_fun = RadarFun(self.nc, self.site_meta, self.date, self.uuid)
        for name, method in RadarFun.__dict__.items():
            if "test_" in name:
                getattr(radar_fun, name)()

    def test_long_names(self):
        data = [
            ("nfft", "Number of FFT points"),
            ("nave",
             "Number of spectral averages (not accounting for overlapping FFTs)"
             ),
            ("rg0", "Number of lowest range gates"),
            ("prf", "Pulse Repetition Frequency"),
            ("SNR", "Signal-to-noise ratio"),
        ]
        for key, expected in data:
            if key in self.nc.variables:
                value = self.nc.variables[key].long_name
                assert value == expected, f"{value} != {expected}"

    def test_processing_of_one_nc_file(self):
        assert len(self.nc.variables["time"][:]) == self.n_time1

    def test_global_attributes(self):
        assert self.nc.source == "METEK MIRA-35"
        assert self.nc.title == f'MIRA-35 cloud radar from {self.site_meta["name"]}'

    def test_processing_of_several_nc_files(self):
        temp_file = NamedTemporaryFile()
        mira.mira2nc(filepath, temp_file.name, self.site_meta)
        nc = netCDF4.Dataset(temp_file.name)
        assert len(nc.variables["time"][:]) == self.n_time1 + self.n_time2
        nc.close()

    def test_correct_date_validation(self):
        temp_file = NamedTemporaryFile()
        mira.mira2nc(f"{filepath}/20210102_0000.mmclx",
                     temp_file.name,
                     self.site_meta,
                     date="2021-01-02")

    def test_wrong_date_validation(self):
        temp_file = NamedTemporaryFile()
        with pytest.raises(ValidTimeStampError):
            mira.mira2nc(f"{filepath}/20210102_0000.mmclx",
                         temp_file.name,
                         self.site_meta,
                         date="2021-01-03")

    def test_uuid_from_user(self):
        temp_file = NamedTemporaryFile()
        uuid_from_user = "******"
        uuid = mira.mira2nc(f"{filepath}/20210102_0000.mmclx",
                            temp_file.name,
                            self.site_meta,
                            uuid=uuid_from_user)
        nc = netCDF4.Dataset(temp_file.name)
        assert nc.file_uuid == uuid_from_user
        assert uuid == uuid_from_user
        nc.close()

    def test_geolocation_from_source_file(self):
        temp_file = NamedTemporaryFile()
        meta_without_geolocation = {"name": "Kumpula"}
        mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name,
                     meta_without_geolocation)
        nc = netCDF4.Dataset(temp_file.name)
        for key in ("latitude", "longitude", "altitude"):
            assert key in nc.variables
            assert nc.variables[key][:] > 0
        nc.close()
Пример #12
0
 def test_correct_date_validation(self):
     temp_file = NamedTemporaryFile()
     mira.mira2nc(f"{filepath}/20210102_0000.mmclx",
                  temp_file.name,
                  self.site_meta,
                  date="2021-01-02")
Пример #13
0
 def test_processing_of_several_nc_files(self):
     temp_file = NamedTemporaryFile()
     mira.mira2nc(filepath, temp_file.name, self.site_meta)
     nc = netCDF4.Dataset(temp_file.name)
     assert len(nc.variables["time"][:]) == self.n_time1 + self.n_time2
     nc.close()