def generate_artificial_data(xdata,tdata,x,t,I_xt,v,sigma_d):
    lim = {'x':xdata,'y':x,'t':tdata,'u':t}
    for s in lim.keys():
        lim['N'+s] = len(lim[s])
        lim['d'+s] = lim[s][1]- lim[s][0]
    lim['v'] = v

    R = past_light_cone_matrix_area(lim=lim)
    s = np.exp(-np.dot(R,I_xt.ravel()))
    # s reshaped as a Nx*Nt matrix:
    true_s = s.reshape(len(xdata),len(tdata))
    # add gaussian noise
    data = true_s + np.random.normal(scale=sigma_d, size = true_s.shape)
    return true_s, data
 def _compute_theta_MAP(self, verbose=False):
     """Utility function. 
     Compute the hidden attribute theta_MAP (from which 
     I_MAP can be computed).
     """
     
     tic = time.clock()
     lim={'v':self.v, 'x':self.xdata, 't':self.tdata, 'u':self.t}
     lim['du'] = lim['u'][1]-lim['u'][0]
     # if FixedOris, I_iu (ori i, time u) is in ini/min, RI = integral of I*(dy=1)*du 
     lim['y'] = self.x_oris if self.FixedOris else self.x
     lim['dy'] = 1 if self.FixedOris else lim['y'][1]-lim['y'][0]
     self._param['R'] = past_light_cone_matrix_area(lim)
     if verbose: print "R computed in {}s".format(time.clock()-tic)
     
     tic = time.clock()
     compute_C0_y_C0_u_for_param(param = self._param)
     if verbose: print "C0 computed in {}s".format(time.clock()-tic)
     
     tic = time.clock()
     self._theta_MAP = compute_theta_MAP_estimate(param = self._param)
     if verbose: print "theta_MAP found in {}s".format(time.clock()-tic)