def _extract_pc(d, root, pc, whichtables):
    """
    Extract all data from a PaleoData dictionary.
    :param dict d: PaleoData dictionary
    :param dict root: Time series root data
    :param str pc: paleoData or chronData
    :param str whichtables: all, meas, summ, or ens
    :return list _ts: Time series
    """
    logger_ts.info("enter extract_pc")
    _ts = []
    try:
        # For each table in pc
        for k, v in d[pc].items():
            if whichtables == "all" or whichtables == "meas":
                for _table_name1, _table_data1 in v["measurementTable"].items():
                    _ts = _extract_table(_table_data1, copy.deepcopy(root), pc, _ts, "meas")
            if whichtables != "meas":
                if "model" in v:
                    for _table_name1, _table_data1 in v["model"].items():
                        # get the method info for this model. This will be paired to all summ and ens table data
                        _method = _extract_method(_table_data1["method"])
                        if whichtables == "all" or whichtables == "summ":
                            if "summaryTable" in _table_data1:
                                for _table_name2, _table_data2 in _table_data1["summaryTable"].items():
                                    # take a copy of this tso root
                                    _tso = copy.deepcopy(root)
                                    # add in the method details
                                    _tso.update(_method)
                                    # add in the table details
                                    _ts = _extract_table(_table_data2, _tso, pc, _ts, "summ")
                        if whichtables == "all" or whichtables == "ens":
                            if "ensembleTable" in _table_data1:
                                for _table_name2, _table_data2 in _table_data1["ensembleTable"].items():
                                    _tso = copy.deepcopy(root)
                                    _tso.update(_method)
                                    _ts = _extract_table(_table_data2, _tso, pc, _ts, "ens")

    except Exception as e:
        logger_ts.warn("extract_pc: Exception: {}".format(e))
    return _ts