def METHOD_NAME(parameters):
    timer = Timer()
    sim = import_module(parameters.simulator)
    timer.mark("import")
    sim.setup(threads=parameters.threads)
    timer.mark("setup")
    populations = {}
    for name, P in parameters.populations.parameters():
        populations[name] = sim.Population(P.n, getattr(sim, P.celltype)(**P.params), label=name)
    timer.mark("build")
    if parameters.projections:
        projections = {}
        for name, P in parameters.projections.parameters():
            connector = getattr(sim, P.connector.type)(**P.connector.params)
            synapse_type = getattr(sim, P.synapse_type.type)(**P.synapse_type.params)
            projections[name] = sim.Projection(populations[P.pre],
                                               populations[P.post],
                                               connector,
                                               synapse_type,
                                               receptor_type=P.receptor_type,
                                               label=name)
        timer.mark("connect")
    if parameters.recording:
        for pop_name, to_record in parameters.recording.parameters():
            for var_name, n_record in to_record.items():
                populations[pop_name].sample(n_record).record(var_name)
        timer.mark("record")
    sim.run(parameters.sim_time)
    timer.mark("run")
    spike_counts = {}
    if parameters.recording:
        for pop_name in parameters.recording.names():
            block = populations[pop_name].get_data()  # perhaps include some summary statistics in the data returned?
            spike_counts["spikes_%s" % pop_name] = populations[pop_name].mean_spike_count()
        timer.mark("get_data")
    mpi_rank = sim.rank()
    num_processes = sim.num_processes()
    sim.end()
    data = dict(timer.marks)
    data.update(num_processes=num_processes)
    data.update(spike_counts)
    return mpi_rank, data