Esempio n. 1
0
 def create_filename_parser(self, base_dir):
     # just in case a writer needs more complex file patterns
     # Set a way to create filenames if we were given a pattern
     if base_dir and self.file_pattern:
         file_pattern = os.path.join(base_dir, self.file_pattern)
     else:
         file_pattern = self.file_pattern
     return parser.Parser(file_pattern) if file_pattern else None
Esempio n. 2
0
 def create_filename_parser(self, base_dir):
     """Create a :class:`trollsift.parser.Parser` object for later use."""
     # just in case a writer needs more complex file patterns
     # Set a way to create filenames if we were given a pattern
     if base_dir and self.file_pattern:
         file_pattern = os.path.join(base_dir, self.file_pattern)
     else:
         file_pattern = self.file_pattern
     return parser.Parser(file_pattern) if file_pattern else None
Esempio n. 3
0
    def __init__(self, filename):
        self.latitudes = None
        self.longitudes = None
        if filename.endswith('.h5'):
            prefix = filename.strip('.h5')
            self.h5_filename = filename
            self.nc_filename = os.path.basename(filename).replace('.h5', '.nc')
        elif filename.endswith('.hdf'):
            prefix = filename.strip('.hdf')
            self.h5_filename = filename
            self.nc_filename = os.path.basename(filename).replace(
                '.hdf', '.nc')
        else:
            self.h5_filename = None
            self.nc_filename = filename
            prefix = filename.strip('.nc')

        self.temp = None
        self.skin_temp = None
        self.topo = None
        self.shape_2d = (0, 0)
        self.time_shape = (0, )
        self.shape = (0, 0, 0, 0)
        self.tdew = None
        self.qspec = None
        self.pres = None
        self.ozone = None

        # Location of profile as a string e.g. as in 'N1578;W04600'
        self.locations = None
        piasi = parser.Parser(iasi_file_pattern)
        items = piasi.parse(os.path.basename(prefix))
        self.start_time = items['start_time']
        if 'end_time' in items:
            self.end_time = items['end_time']
        else:
            self.end_time = self.start_time + timedelta(seconds=15 * 60)

        self.platform_name = PLATFORMS.get(items['platform_name'],
                                           items['platform_name'])
        self.time_origo = datetime(2000, 1, 1)

        if self.h5_filename:
            self._load()
        else:
            self._loadnc()
Esempio n. 4
0
def get_lrit_filenames(scene, area_name):
    """Get the set of lrit filenames for the given scene
    """

    conf = ConfigParser()
    conf.read(os.path.join(CONFIG_PATH, scene.fullname + ".cfg"))

    filename = conf.get(scene.instrument_name + "-level4",
                        "filename",
                        raw=True,
                        vars=os.environ)
    directory = conf.get(scene.instrument_name + "-level4",
                         "dir",
                         vars=os.environ)
    pathname_tmpl = os.path.join(directory, filename)
    LOG.debug("Path = " + str(pathname_tmpl))

    fparser = parser.Parser(pathname_tmpl)

    lrit_files = glob(
        parser.globify(pathname_tmpl, {'nominal_time': scene.time_slot}))

    prologue = None
    segmfiles = []
    segm_numbers = []
    for item in lrit_files:
        p__ = fparser.parse(item)
        segm = p__['segment'].strip('_')
        if segm == 'PRO':
            prologue = item
        else:
            segm_numbers.append(int(segm))
            segmfiles.append(item)

    if not prologue:
        LOG.warning("No prologue file found for timeslot")

    segm_numbers.sort()
    if range(1, 11) == segm_numbers:
        LOG.info("All ten segment files found")
    else:
        LOG.warning("Less than 10 segments found: %s", str(segm_numbers))

    return prologue, segmfiles
Esempio n. 5
0
    def read_from_lrit(self, filenames, gribfilename=None):
        """Read and concatenate the LRIT segments"""

        self._lritfiles = filenames

        if len(filenames) == 0:
            print("No files provided!")
            return

        if gribfilename:
            self._store_grib = True
            self._gribfilename = gribfilename
        else:
            self._store_grib = False
            self._gribfilename = tempfile.mktemp(suffix='.grb')

        p__ = parser.Parser(LRIT_PATTERN)

        bstr = {}
        nsegments = 0
        for lritfile in self._lritfiles:
            if os.path.basename(lritfile).find('PRO') > 0:
                print("PRO file... %s: Skip it..." % lritfile)
                continue

            res = p__.parse(os.path.basename(lritfile))
            segm = int(res['segment'].strip('_'))
            if not self.timeslot:
                self.timeslot = res['nominal_time']
            LOG.debug("Segment = %d", segm)
            nsegments = nsegments + 1

            with open(lritfile) as fpt:
                fpt.seek(103)
                bstr[segm] = fpt.read()

        fstr = bstr[1]
        for idx in range(2, nsegments + 1):
            fstr = fstr + bstr[idx]

        with open(self._gribfilename, 'wb') as fpt:
            fpt.write(fstr)

        self.readgrib()