def LNKS_fobj(theta, stim, y, options): ''' LNKS Objective function ----------------------- This is an objective function for the LNK, LNKS, and LNKS_MP models. Calls LNKS_fobj_helper function, and numel_gradient function(objectivetools), if is_grad option is True. The numel_gradient function uses multiprocessing , a built-in python module, to make the gradient computing process parallel. Returns objective value(J) and gradient(grad). If is_grad option is False, only returns objective value. Inputs ------ theta: model parameters stim: input data y: output data (fr) options (dictionary): model (string): models are ('LNK', 'LNKS', 'LNKS_MP') pathway (int): LNK pathway (1 or 2) is_grad (bool): bool (gradient on(True) or off(False)) Outputs ------- J: objective value grad: gradient of objective ''' basis = LinearFilterBasis_8param() nzstim = stim - _np.mean(stim) # nzstim: mean subtracted stimulus options['basis'] = basis J0 = LNKS_fobj_helper(LNKS, theta, nzstim, y, options) # evaluate function value at original point if options['is_grad']: grad = _obj.numel_gradient(LNKS_fobj_helper, LNKS, theta, nzstim, y, J0, options) return J0, grad else: return J0