<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def run(scenario, config=None, base_config=None, outputs=None, return_config=False):
 """ Runs a scenario through the Hector climate model. Parameters scenario : DataFrame DataFrame with emissions. See ``pyhector.rcp26`` for an example and :mod:`pyhector.units` for units of emissions values. config : dictionary, default ``None`` Additional config options that overwrite the base config. base_config : dictionary Base config to use. If None uses Hector's default config. Values in config override values in base_config. default None outputs : array_like List of requested output variables as strings. if set to "all" returns all available variables. Defaults to global temperature, CO2 concentration and forcing. A full list is in :py:data:`variables`. return_config : boolean Additionaly return the full config used from adding ``config`` values to ``base_config``. default False Returns ------- DataFrame Pandas DataFrame with results in the columns requested in ``outputs``. dictionary, optional When ``return_config`` is set to True results and parameters are returned as a tuple. """

    if outputs is None:
        outputs = ["temperature.Tgav", "simpleNbox.Ca", "forcing.Ftot"]
    if base_config is None:
        parameters = deepcopy(_default_config)
    else:
        parameters = deepcopy(base_config)
    if config:
        for key, data in config.items():
            for option, value in data.items():
                parameters[key][option] = value
    with Hector() as h:
        h.config(parameters)
        h.set_emissions(scenario)
        if outputs == "all":
            outputs = output.keys()
        for name in outputs:
            h.add_observable(
                output[name]["component"],
                output[name]["variable"],
                output[name].get("needs_date", False),
            )
        h.run()
        results = {}
        for name in outputs:
            results[name] = h.get_observable(
                output[name]["component"], output[name]["variable"]
            )

        # In Hector 1.x output value years are given as end of simulation
        # year, e.g. 1745-12-31 = 1746.0.
        # See https://github.com/JGCRI/hector/issues/177
        start = int(parameters["core"]["startDate"]) + 1
        # End of range is non-inclusive in Python ranges.
        end = int(parameters["core"]["endDate"]) + 1
        index = np.arange(start, end)
        results = pd.DataFrame(results, index=index)
    if return_config:
        return results, parameters
    return results