function [] = RunEyeNeuronAnalysis(data_behavior,events,plxdata,filename,eye_time,eye,plot_fig)

  plot_onset = -0.5;
  plot_offset = 1;
  bin = 60;   %bin =60 msec for stat analysis
  slide = 1;  %sliding procedure shift = 1-msec
  
  %index to plot and save the figure for individual neurons
  if isempty(plot_fig)
     plot_fig = 1;
  end
  
  %--------------  BEHAVIORAL DATA  ---------------------------
  %Measure the SSRT for individual session
  [behavior_stoptask] = detectSSRT(data_behavior,events);
  
  %TRIAL TYPES-----------------------------------------
  %go trials without stop signal
  GO_trials = find(6 >= data_behavior.TP & data_behavior.TP >= 1 | 18 >= data_behavior.TP & data_behavior.TP >= 13);
  GO_trials = GO_trials(isnan(events.change_signal(GO_trials)));
  GO_trials_success = GO_trials(~isnan(events.reward(GO_trials))); %with rewarded trials only and mvt onset well-detected
  GO_trials_success = GO_trials_success(~isnan(events.mvt_onset(GO_trials_success)));

  %go trials with stop signal
  GO_stoptrials = find(6 >= data_behavior.TP & data_behavior.TP >= 1 | 18 >= data_behavior.TP & data_behavior.TP >= 13);
  GO_stoptrials = GO_stoptrials(~isnan(events.change_signal(GO_stoptrials)));
  GO_stoptrials_success = GO_stoptrials(~isnan(events.reward(GO_stoptrials))); %with rewarded trials only
  
  %fake SSRT for GO trials
  SSD_distrib = [200:1:450];
  SSD_events = [];
  
  for loop = 1:1000
    [SSD_values,rank] = shuffle(SSD_distrib);
    
    for iii = 1:length(GO_trials_success)
      
        trial = GO_trials_success(iii);
        fake_event = events.go_signal(trial) + SSD_values(trial);
      
        if (fake_event + behavior_stoptask.SSRT)<events.centreout(trial)  %only latency-matching trials\
            fake_SSD(iii) = fake_event;
        else
            fake_SSD(iii) = NaN;
        end

    end
  
    SSD_events = [SSD_events fake_SSD(~isnan(fake_SSD))];
  
  end

  %---------------------------------------------------------------------
  
  % Extract EYE kinematics: positions and velocities x/y coordinates
  % In checking that there is no artifact in the signal previously
  % filtered
  
  SAMPL = eye_time(1);		% analog sampling interval (msec between samples)
  load filt_diff_1kHz_25_calib
  
  %trials with Switch-Stop signal
  evt_cue = events.change_signal(GO_stoptrials_success) /1000;
  
  [avg_switch_X, ci, time_bin, peri_switch_X] = perievent_emg(eye(:,1),evt_cue,plot_onset,plot_offset,1000,0.95);

  [avg_switch_Y, ci, time_bin, peri_switch_Y] = perievent_emg(eye(:,3),evt_cue,plot_onset,plot_offset,1000,0.95);
  clear evt_cue
  
  %trials with NO Switch-Stop signal with fake SSD
  evt_cue = SSD_events /1000;
  evt_cue = shuffle(evt_cue);
  evt_cue = evt_cue(1:length(GO_stoptrials_success));
  evt_select = evt_cue;

  [avg_go_X, ci, time_bin, peri_go_X] = perievent_emg(eye(:,1),evt_cue,plot_onset,plot_offset,1000,0.95);

  [avg_go_Y, ci, time_bin, peri_go_Y] = perievent_emg(eye(:,3),evt_cue,plot_onset,plot_offset,1000,0.95);
  clear evt_cue
  
  %Artefacts substraction---------------------------
    
  [m n] = size(peri_switch_X);
  matrix_dirX = NaN(size(peri_switch_X));
  matrix_dirY = NaN(size(peri_switch_X));
  matrix_vX = NaN(size(peri_switch_X));
  matrix_vY = NaN(size(peri_switch_X));

  for ii = 1:m
      
      matrix_dirX(ii,:) = ((rst_filt_coeff(coeff,peri_switch_X(ii,:),'lp'))./47.23).*10;
      matrix_dirY(ii,:) = (rst_filt_coeff(coeff,peri_switch_Y(ii,:),'lp'))./47.23;
      artefact_bins = find(sqrt( matrix_dirX(ii,:).^2 +  matrix_dirY(ii,:).^2)>33.6);

      if max(diff(artefact_bins))==1 %one artefact only
          
          artefact_bins = artefact_bins(1)-50:1:artefact_bins(end)+50;
          bins_c = find (artefact_bins>0);
          artefact_bins = artefact_bins(bins_c);
          bins_max = find (artefact_bins<n);
          artefact_bins = artefact_bins(bins_max);
          
          matrix_dirX(ii,artefact_bins) = NaN;
          matrix_dirY(ii,artefact_bins) = NaN;

      elseif max(diff(artefact_bins))>1  % several artefacts
          
          bins_sec = find (diff(artefact_bins)>1);
          bins_sec = bins_sec(1);

          artefact_bins1 = artefact_bins(1)-50:1:artefact_bins(bins_sec)+50;
          artefact_bins2 = artefact_bins(bins_sec+1)-50:1: artefact_bins(end)+50;  
          artefact_bins = [artefact_bins1 artefact_bins2]; 

          bins_c = find (artefact_bins>0);
          artefact_bins = artefact_bins(bins_c);
          bins_max = find (artefact_bins<n);
          artefact_bins = artefact_bins(bins_max);
          
          matrix_dirX(ii,artefact_bins) = NaN;
          matrix_dirY(ii,artefact_bins) = NaN;
      end

      matrix_vX(ii,:) = abs(rst_filt_coeff(coeff,matrix_dirX(ii,:),'dif'));
      matrix_vY(ii,:) = abs(rst_filt_coeff(coeff,matrix_dirY(ii,:),'dif'));
  end
  
  %---------------------no-stop trials-----------------------
  [m n] = size(peri_go_X);
  mvt_dirX = NaN(size(peri_go_X));
  mvt_dirY = NaN(size(peri_go_X));
  mvt_vX = NaN(size(peri_go_X));
  mvt_vY = NaN(size(peri_go_X));

  for ii = 1:m
      
      mvt_dirX(ii,:) = ((rst_filt_coeff(coeff,peri_go_X(ii,:),'lp'))./47.23).*10;
      mvt_dirY(ii,:) = (rst_filt_coeff(coeff,peri_go_Y(ii,:),'lp'))./47.23;
      artefact_bins = find(sqrt( mvt_dirX(ii,:).^2 +  mvt_dirY(ii,:).^2)>33.6);

      if max(diff(artefact_bins))==1 %one artefact only
          
          artefact_bins = artefact_bins(1)-50:1:artefact_bins(end)+50;
          bins_c = find (artefact_bins>0);
          artefact_bins = artefact_bins(bins_c);
          bins_max = find (artefact_bins<n);
          artefact_bins = artefact_bins(bins_max);
          
          mvt_dirX(ii,artefact_bins) = NaN;
          mvt_dirY(ii,artefact_bins) = NaN;

      elseif max(diff(artefact_bins))>1  % several artefacts
          
          bins_sec = find (diff(artefact_bins)>1);
          bins_sec = bins_sec(1);

          artefact_bins1 = artefact_bins(1)-50:1:artefact_bins(bins_sec)+50;
          artefact_bins2 = artefact_bins(bins_sec+1)-50:1: artefact_bins(end)+50;  
          artefact_bins = [artefact_bins1 artefact_bins2]; 

          bins_c = find (artefact_bins>0);
          artefact_bins = artefact_bins(bins_c);
          bins_max = find (artefact_bins<n);
          artefact_bins = artefact_bins(bins_max);
          
          mvt_dirX(ii,artefact_bins) = NaN;
          mvt_dirY(ii,artefact_bins) = NaN;
      end

      mvt_vX(ii,:) = abs(rst_filt_coeff(coeff,mvt_dirX(ii,:),'dif'));
      mvt_vY(ii,:) = abs(rst_filt_coeff(coeff,mvt_dirY(ii,:),'dif'));
  end
  
  %--------------  NEURONAL DATA  ---------------------------
  timestamps = plxdata.sig001a.ts .*1000;  % Neural activity
  [sdf_Switch_trials] = sdf_neurons(timestamps,events.change_signal(GO_stoptrials_success),plot_onset,plot_offset);
  [sdf_GO_trials] = sdf_neurons(timestamps,floor(evt_select * 1000),plot_onset,plot_offset);
  
  %-----------------STAT with a slidind window procedure-----------------------------------
 
  % For EYEx 
  [m n] = size(matrix_dirX);
  Wind_on = [1:slide:n-bin];
  Wind_off = [bin:slide:n-1];
  
  for k = 1:length(Wind_on)
        delta_dirX(:,k) = nanmean( matrix_dirX(:,Wind_on(k):Wind_off(k)),2);
        delta_dirY(:,k) = nanmean( matrix_dirY(:,Wind_on(k):Wind_off(k)),2);
        delta_velX(:,k) = nanmean( matrix_vX(:,Wind_on(k):Wind_off(k)),2);
        delta_velY(:,k) = nanmean( matrix_vY(:,Wind_on(k):Wind_off(k)),2);
  end
  
  %Normalization for GLM
  [ntrials,nbins] = size(delta_dirX);
  for iii = 1:ntrials
      
      delta_dirX(iii,:) = (delta_dirX(iii,:) - nanmean(delta_dirX(iii,:)))./nanstd(delta_dirX(iii,:));
      delta_dirY(iii,:) = (delta_dirY(iii,:) - nanmean(delta_dirY(iii,:)))./nanstd(delta_dirY(iii,:));
      delta_velX(iii,:) = (delta_velX(iii,:) - nanmean(delta_velX(iii,:)))./nanstd(delta_velX(iii,:));
      delta_velY(iii,:) = (delta_velY(iii,:) - nanmean(delta_velY(iii,:)))./nanstd(delta_velY(iii,:));
  end
  
  %------------------------------------
 
  [m n] = size(mvt_dirX);
  Wind_on = [1:slide:n-bin];
  Wind_off = [bin:slide:n-1];
  
  for k = 1:length(Wind_on)
        sigma_dirX(:,k) = nanmean( mvt_dirX(:,Wind_on(k):Wind_off(k)),2);
        sigma_dirY(:,k) = nanmean( mvt_dirY(:,Wind_on(k):Wind_off(k)),2);
        sigma_velX(:,k) = nanmean( mvt_vX(:,Wind_on(k):Wind_off(k)),2);
        sigma_velY(:,k) = nanmean( mvt_vY(:,Wind_on(k):Wind_off(k)),2);
  end
  
  %Normalization for GLM
  [ntrials,nbins] = size(sigma_dirX);
  for iii = 1:ntrials
      
      sigma_dirX(iii,:) = (sigma_dirX(iii,:) - nanmean(sigma_dirX(iii,:)))./nanstd(sigma_dirX(iii,:));
      sigma_dirY(iii,:) = (sigma_dirY(iii,:) - nanmean(sigma_dirY(iii,:)))./nanstd(sigma_dirY(iii,:));
      sigma_velX(iii,:) = (sigma_velX(iii,:) - nanmean(sigma_velX(iii,:)))./nanstd(sigma_velX(iii,:));
      sigma_velY(iii,:) = (sigma_velY(iii,:) - nanmean(sigma_velY(iii,:)))./nanstd(sigma_velY(iii,:));
  end

  %-------------------------
  
  % For NeuNx
  [m n] = size(sdf_Switch_trials.delta);
  Wind_on = [1:slide:n-bin];
  Wind_off = [bin:slide:n-1];
  
  for k = 1:length(Wind_on)
      delta_Switch(:,k) = sum(sdf_Switch_trials.delta(:,Wind_on(k):Wind_off(k)),2);
      sigma_go(:,k) = sum(sdf_GO_trials.delta(:,Wind_on(k):Wind_off(k)),2);
  end
  
    %time scale for neurons
    time_bined = [plot_onset:0.001:plot_onset+((length(delta_Switch)-1)/1000)];
    time_bined = time_bined + (bin/2)/1000;
      
  %--------------GLM-------------------------------  
  
  for iv = 1:nbins
       clear values values_go
       values = delta_Switch(:,iv);  %neural activity 
       values_go = sigma_go(:,iv);
       
       cst = ones(length(values),1);
       kinematics = [cst delta_dirX(:,iv) delta_dirY(:,iv) delta_velX(:,iv) delta_velY(:,iv)];
       kinematics2 = [cst sigma_dirX(:,iv) sigma_dirY(:,iv) sigma_velX(:,iv) sigma_velY(:,iv)];
       
       [b_glm,bint_glm,r_glm,rint_glm,stats_glm] = regress(values,kinematics);
        Rsquare(1,iv) = stats_glm(1);  
        Pvalue(1,iv) = stats_glm(3);
        
        [b_glm2,bint_glm,r_glm,rint_glm,stats_glm2] = regress(values_go,kinematics2);
        Rsquare_go(1,iv) = stats_glm2(1); 
  end
  
  %----shuffle for stats ---------------- 
  parpool
  
  parfor iii = 1:1000
      for iv = 1:nbins 
          
          values = delta_Switch(:,iv);  %neural activity 
          values = shuffle(values);
          
           cst = ones(length(values),1);
           kinematics = [cst delta_dirX(:,iv) delta_dirY(:,iv) delta_velX(:,iv) delta_velY(:,iv)];
       
           [b_glm,bint_glm,r_glm,rint_glm,stats_glm] = regress(values,kinematics);
           
           Rsquare_shuffle(iii,iv) = stats_glm(1);
      end
  end
  
  for jj = 1:nbins 
      
      stat_values = Rsquare_shuffle(:,jj);
      stat_values = stat_values(~isnan(stat_values));
      ranking = sort(stat_values,'descend');
      n_rank = floor(length(ranking) * 0.005);
      stat_thr(1,jj) = ranking(floor( n_rank));
  end
  
  %----------------------
  
   parfor iii = 1:1000
      for iv = 1:nbins 
          
          values = sigma_go(:,iv);  %neural activity 
          values = shuffle(values);
          
           cst = ones(length(values),1);
           kinematics2 = [cst sigma_dirX(:,iv) sigma_dirY(:,iv) sigma_velX(:,iv) sigma_velY(:,iv)];
       
           [b_glm,bint_glm,r_glm,rint_glm,stats_glm2] = regress(values,kinematics2);
           
           Rsquare2_shuffle(iii,iv) = stats_glm2(1);
      end
  end
  
   for jj = 1:nbins 
      stat_values = Rsquare2_shuffle(:,jj);
      stat_values = stat_values(~isnan(stat_values));
      ranking = sort(stat_values,'descend');
      n_rank = floor(length(ranking) * 0.005);
      stat2_thr(1,jj) = ranking(floor( n_rank));
  end
  
  
  p = gcp;
  delete (p)
  
 %---------Plotting----------------------------------

 if plot_fig == 1
 
  figure
  subplot(3,4,1)
  plot(time_bined,delta_dirX, 'k')
  xlabel('Time relative to Switch-stop')
  ylabel('X position')
  xlim([-0.5 1])
  ylim([-4 4])
  
  subplot(3,4,2)
  plot(time_bined,delta_dirY, 'k')
  xlabel('Time relative to Switch-stop')
  ylabel('Y position')
  xlim([-0.5 1])
  ylim([-4 4])
  
  subplot(3,4,3)
  plot(time_bined,delta_velX, 'k')
  xlabel('Time relative to Switch-stop')
  ylabel('X velocity')
  xlim([-0.5 1])
  ylim([-1 8])
  
  subplot(3,4,4)
  plot(time_bined,delta_velY, 'k')
  xlabel('Time relative to Switch-stop')
  ylabel('Y velocity')
  xlim([-0.5 1])
  ylim([-1 8])
  
  subplot(3,4,5)
  plot(time_bined,sigma_dirX, 'k')
  xlabel('Time relative to putative-switch')
  ylabel('X position')
  xlim([-0.5 1])
  ylim([-4 4])
  
  subplot(3,4,6)
  plot(time_bined,sigma_dirY, 'k')
  xlabel('Time relative to putative-switch')
  ylabel('Y position')
  xlim([-0.5 1])
  ylim([-4 4])
  
  subplot(3,4,7)
  plot(time_bined,sigma_velX, 'k')
  xlabel('Time relative to putative-switch')
  ylabel('X velocity')
  xlim([-0.5 1])
  ylim([-1 8])
  
  subplot(3,4,8)
  plot(time_bined,sigma_velY, 'k')
  xlabel('Time relative to putative-switch')
  ylabel('Y velocity')
  xlim([-0.5 1])
  ylim([-1 8])
  
  subplot(3,4,9)
  hold on
  plot(time_bined,Rsquare, 'b')
  xlim([-0.5 1])
  xlabel('Time relative to Switch-stop')
  ylabel('R2 switch')
  plot(time_bined,stat_thr, 'r')
  ylim([0 1])
  
  subplot(3,4,10)
  hold on
  plot(time_bined,Rsquare_go, 'k')
  xlim([-0.5 1])
  xlabel('Time relative to putative-stop')
  ylabel('R2 no-stop')
  plot(time_bined,stat2_thr, 'r')
  ylim([0 1])

    meta_name = ['EYE_GLM_' filename '.emf'];
        print( '-dmeta','-r600', meta_name);
        close
        clear delta_Switch delta_dirX delta_dirY delta_velX delta_velY Rsquare_shuffle shuff
 end
 