Is there a way to call "access callback" with parameters? I have:

function hook_menu()  {
    $items = array();
    $items['experiment-2'] = array(
        'title' =&gt; 'Experiment 2',
        'page callback' =&gt; 'drupal_get_form',
        'page arguments' =&gt; array('experiment_form'),
        'access callback' =&gt; 'user_can_access_experiment',
        'file' =&gt; 'includes/experiment-2.form.inc',
        'type' =&gt; MENU_NORMAL_ITEM,
      );

    ...


This will call:

function user_can_access_experiment() { }


But I want to be able to call it something like:

function user_can_access_experiment($experimentID) { }


And then somehow let hook_menu call the function as user_can_access_experiment(1) or user_can_access_experiment(2) or whatever.

Is this possible?
If I understand your query right the access callback needs to accept a parameter based on which it decides whether or not to return TRUE for the menu path. This should be achievable using access arguments, like

'access arguments' =&gt; array($experimentID),

quoting from the hook_menu API documentation


  "access arguments": An array of arguments to pass to the access
  callback function, with path component substitution as described
  above. If the access callback is inherited (see above), the access
  arguments will be inherited with it, unless overridden in the child
  menu item.


The passed argument, in your case the $experimentID could be either from any custom computation like a value from the user object or even a part of your query parameters.