TNO Intern

Commit a4f25365 authored by Arjo Segers's avatar Arjo Segers
Browse files

Updates to support latest pandas version and changes in CSO_Listing class.

parent 7fde14c3
Loading
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -21,6 +21,10 @@
# 2024-01, Arjo Segers
#   Use new plotting routines based on cartopy.
#
# 2025-04, Arjo Segers
#   Updated for latest changes in CSO_Listing class.
#


########################################################################
###
@@ -311,9 +315,9 @@ class CSO_Catalogue(CSO_CatalogueBase):
        # read listing:
        lst = cso_file.CSO_Listing(lstfile, indent=indent)
        # subset of files in timerange:
        df = lst.Select(tr=(t1, t2))
        xlst = lst.Select(tr=(t1, t2))
        # number of records:
        nrec = len(df)
        nrec = len(xlst)

        # info ...
        logging.info("  records within timerange: %i" % nrec)
@@ -361,21 +365,21 @@ class CSO_Catalogue(CSO_CatalogueBase):
            # info ..
            logging.info(indent + "loop over orbit files ...")
            # loop:
            for fname in df.index:
            for fname in xlst.GetValues():
                # info ..
                logging.info(indent + "  %s ..." % fname)
                # full path:
                filename = os.path.join(inputdir, fname)

                # orbit key:
                orbit = df.at[fname, "orbit"]
                orbit = xlst.GetValue(fname, "orbit")

                ## testing ...
                # if '1200' not in filename : continue

                # time range:
                tr1 = df.at[fname, "start_time"]
                tr2 = df.at[fname, "end_time"]
                tr1 = xlst.GetValue(fname, "start_time")
                tr2 = xlst.GetValue(fname, "end_time")
                # mid time:
                taver = tr1 + 0.5 * (tr2 - tr1)

+36 −11
Original line number Diff line number Diff line
@@ -30,6 +30,13 @@
#   Option to CheckDir to set directory creation mode.
#   Accept dmode=None as default.
#
# 2025-04, Arjo Segers
#   Convert datetime time values in listing files after reading to keep default str values in table.
#   Updated methods of CSO_Listing class:
#   - GetValues now returns the index column by defaul.
#   - added GetValue method
#   Removed usage of undefined filename in error messages.
#

########################################################################
###
@@ -1285,9 +1292,12 @@ class CSO_Listing(object):
                filename,
                sep=self.sep,
                index_col=self.index_label,
                parse_dates=["start_time", "end_time"],
                dtype="str",
            )
            # convert datetime columns, as the default is "str" 
            # the "parse_dates" argument could not be used:
            self.df["start_time"] = pandas.to_datetime( self.df["start_time"] )
            self.df["end_time"] = pandas.to_datetime( self.df["end_time"] )

        else:
            # new table:
@@ -1351,20 +1361,35 @@ class CSO_Listing(object):

    # *

    def GetValues(self, name):
    def GetValue(self, filename, key ):
        """
        Return :py:class:`pandas.Series` object with all values for provided column ``name``.
        Return ``key`` value for record of ``filename``.
        """

        # check ..
        if name not in self.df.keys():
            logging.error(f"column '{name}' not found in: {self.filename}")
        # copy:
        return self.df.at[filename,key]

    # enddef GetValue

    # *

    def GetValues(self, name=None):
        """
        Return :py:class:`pandas.Series` object with all values for provided column ``name``,
        or the filenames if ``name`` is not provided.
        """

        # switch ..
        if name is None :
            return self.df.index
        elif name in self.df.keys():
            return self.df[name]
        else:
            logging.error(f"column '{name}' not found in listing")
            raise Exception
        # endif
        # extract:
        return self.df[name]

    # enddef GetRecord
    # enddef GetValues

    # *

@@ -1426,7 +1451,7 @@ class CSO_Listing(object):

        # check ..
        if fname not in self.df.index:
            logging.error('file "%s" is not a record in table: %s' % (fname, self.filename))
            logging.error('file "%s" is not a record in table: %s' % (fname, filename))
            raise Exception
        # endif

@@ -1555,7 +1580,7 @@ class CSO_Listing(object):
        for key, value in kwargs.items():
            # check ..
            if key not in df.keys():
                logging.error(f"key '{key}' not defined in listing: {self.filename}")
                logging.error(f"key '{key}' not defined in listing")
                raise Exception
            # endif
            # select:
+7 −1
Original line number Diff line number Diff line
@@ -25,6 +25,9 @@
# 2025-02, Arjo Segers
#   Fixed type conversion of "dmode" setting.
#
# 2025-04, Arjo Segers
#   Convert datetime time values in listing files after reading to keep default str values in table.
#

########################################################################
###
@@ -221,9 +224,12 @@ class CSO_Inquire_Plot(utopya.UtopyaRc):
                    filename,
                    sep=";",
                    skip_blank_lines=True,
                    parse_dates=["start_time", "end_time"],
                    dtype="str",
                )
                # convert datetime columns, as the default is "str"
                # the "parse_dates" argument could not be used:
                xdf["start_time"] = pandas.to_datetime( xdf["start_time"] )
                xdf["end_time"] = pandas.to_datetime( xdf["end_time"] )
                # combine:
                if df is None:
                    df = xdf