code: def do_experiment(self, params):
          
          paramlist = self.expand_param_list(params)
          
          # create directories, write config files
          for pl in paramlist:
              # check for required param keys
              if ('name' in pl) and ('iterations' in pl) and ('repetitions' in pl) and ('path' in pl):
                 self.create_dir(pl, self.options.delete)
              else:
                  print 'Error: parameter set does not contain all required keys: name, iterations, repetitions, path'
                  return False
              
          # create experiment list 
          explist = []
              
          # expand paramlist for all repetitions and add self and rep number
          for p in paramlist:
              explist.extend(zip( [self]*p['repetitions'], [p]*p['repetitions'], xrange(p['repetitions']) ))
                  
          # if only 1 process is required call each experiment seperately (no worker pool)
          if self.options.ncores == 1:
              for e in explist:
                  mp_runrep(e)
          else:
              # create worker processes    
              pool = Pool(processes=self.options.ncores)
              pool.map(mp_runrep, explist)
          
          return True
docs: runs one experiment programatically and returns.
              params: either parameter dictionary (for one single experiment) or a list of parameter
              dictionaries (for several experiments).