function Out = move1_birth(W_init,H,T,K,d_bar,v_bar,pz,k2ext,tfk2ext,N2ext)
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here

global Y % da frame 1 ad H (corrente)
global Hfinal

G=H-1; %%%%%%%%%%%%%%%%%%%%%%%%
if T==1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%
   Out=666; %%%%%%%%%%%%%%%%%%%%%%%%%%%%
   return  %%%%%%%%%%%%%%%%%%%%%%%%%%%%
end   %%%%%%%%%%%%%%%%%%%%%%%%%%%%

global nt % qui da frame 1 ad H

%%%%% primo punto della sequenza
if nargin > 7 % extension move 
   t1=H-tfk2ext;
   d1 = randi(d_bar);
else
   t1 = randi(T-1); % presupposto istante di apparizione della nuova track
   d1 = randi(d_bar);
end

while H-t1+d1 > H 
   d1 = randi(d_bar); %  zeta distribution ??????????? controllare quale distribuzione
end

if H-t1+d1 > Hfinal
   Out=666;
   return
end
   



void=1;
if nargin > 7 % extension move 
   for h=1:nt(H-t1+d1)      
      if pdist([ Y(tfk2ext).data( W_init.track(tfk2ext).tau(k2ext).y ,:) ; Y(H-t1+d1).data(h,:) ]) <= d1*v_bar % ~isempty(Ld1_t1(J).td(h).y)
         void=0;
      end
   end
else
   tauK1set1=zeros(nt(H-t1),1);
   for J=1:nt(H-t1)
      for h=1:nt(H-t1+d1)
         used=0;
         for k=1:K
            if tauexist(W_init,H-t1,k) && J == W_init.track(H-t1).tau(k).y % se la J-esima misura all'istante H-t1 non e' associata a qualche track %%%%%%%%%%%%%%%%%%%%
               used=1;
               break;
            end
         end
         if ~used && pdist([ Y(H-t1).data(J,:) ; Y(H-t1+d1).data(h,:) ]) <= d1*v_bar % ~isempty(Ld1_t1(J).td(h).y)
            tauK1set1(J)=1;
            void=0;
         end
      end
   end
end




% is empty?
if nargin > 7 % extension move
   if void
      Out=666; % nessuna estesione possibile
      return
   else
      It1=ones((H-t1),1); % mark degli istanti successivi a t1 che mancano da aggiungere, fino al presente

      tq = zeros((H-t1+1),1);
      J_q = zeros((H-t1+1),1);
      tq(1) = t1;
      tqcounter = 1;
      track_amolst_void = 1; % se la track ha un solo elemento
      
      J_q(tqcounter) = W_init.track(H-t1).tau(k2ext).y;
   end
   
else
   if void
      m=move_selection(K,'nobirth');
      Out=m;
      return
   else
      It1=ones((H-t1),1); % mark degli istanti successivi a t1 che mancano da aggiungere, fino al presente

      tq = zeros((H-t1+1),1);
      J_q = zeros((H-t1+1),1);
      tq(1) = t1;
      tqcounter = 1;
      track_amolst_void = 1; % se la track ha un solo elemento

	  a=find(tauK1set1==1);
      J_q(tqcounter) = a(randi(length(a))); % si sceglie la misura orfana per il birth della track, corrisponde a Y(H-t1).data(J_first,:)
   end
end




breaktool=1;
while ~isempty(It1) % finche' esiste una posizione libera da tq(tqcounter) fino all'istante presente o finch?? non si esauriscono il num dei cicli
   if G > Hfinal
       break
   end
   if (breaktool >= nt(H-tq(tqcounter))*nt(G)*(H-t1))
       break
   end
   if (tqcounter > 2 && rand<=pz)
      break
   else  
      
      dq = randi(d_bar); %  zeta distribution ??????????? controllare quale distribuzione
      tqx = tq(tqcounter); % istante precedente
      J_qx = J_q(tqcounter);

      if H-tqx+dq > H % se non si sfora nel futuro  
		 for d=1:d_bar
		 	dq=d;
		 	if H-tqx+dq <= H
		 		break
		 	end
		 end
      end

      if  H-tqx+dq > Hfinal || H-tqx+dq > H
         break
      end

      % si sceglie la misura orfana per la continuazione della track, corrisponde a Y(H-t1).data(J_q,:)
      void=1;

      tauK1setq=zeros(nt(H-tqx+dq),1);
      for J=1:nt(H-tqx+dq)
         used=0;
         for k=1:K
            if tauexist(W_init,H-tqx+dq,k) 
               if J == W_init.track(H-tqx+dq).tau(k).y % se la J-esima misura all'istante H-tq+dq non e' associata a qualche track %%%%%%%%%%%%%%%%%%%%%%% 
               used=1;
               break
               end
            end
         end
         if ~used && pdist([ Y(H-tqx).data(J_qx,:) ; Y(H-tqx+dq).data(J,:) ]) <= dq*v_bar % quelle non assegnate vicine all'istante successivo
            tauK1setq(J)=1;
            void=0;
            track_amolst_void = 0;
         end
      end

      if void
      	 breaktool=breaktool+1;
         continue
      else         
         It1=It1(H-tqx:end); % da H-tqx fino alla posizione usata si cancella da quelle disponibili (non da H-tqx+dq!!!)
         tqcounter = tqcounter + 1;
         tq(tqcounter)=tqx-dq;
         a=find(tauK1setq==1);
      	 J_q(tqcounter) = a(randi(length(a))); % si sceglie la misura orfana per l'osservazione successiva in tqx+dq della track
         
      end
   end
end




if track_amolst_void
   Out=666;
   return % si rifiuta la mossa se il percorso creato ha meno di 2 punti
end



% ora si propone la partizione
% non si poteva fare prima perche' non si era sicuri che la mossa fosse accettata

if nargin > 7 % extension move 
   K1=k2ext;
else
   K1=K+1;
   W_init.tracks = K1; % ci sara' una nuova track
end

if nargin > 7
   
   for o=1:tqcounter-1 
       W_init.track(H-tq(o)).tau(K1).y=J_q(o); % si crea il nuovo tauK1 che parte all'istante H-t1, anche se scompare dopo rimarra' il suo campo tauK1 per sempre in tutti gli istanti successivi
       W_init.track(H-tq(o)).tau(K1).frame=N2ext+o-1; % si dice a che i-esima osservazione di tauK1 corrisponda
       if isfield(W_init.track(H-tq(o)),'tau0') && ~isempty(W_init.track(H-tq(o)).tau0)
          W_init.track(H-tq(o)).tau0(W_init.track(H-tq(o)).tau0==J_q(o))=NaN; % si toglie dai falsi allarmi se era presente, ponendo NaN al suo posto
   	   end
       W_init.track(H-tq(o)).tau(K1).islast=[];
       W_init.track(H-tq(o)).tau(K1).AAA='mossa5'; %%%%%%%%%%%%
   end
   
else

   for o=1:tqcounter-1 
       W_init.track(H-tq(o)).tau(K1).y=J_q(o); % si crea il nuovo tauK1 che parte all'istante H-t1, anche se scompare dopo rimarra' il suo campo tauK1 per sempre in tutti gli istanti successivi
       W_init.track(H-tq(o)).tau(K1).frame=o; % si dice a che i-esima osservazione di tauK1 corrisponda
        if isfield(W_init.track(H-tq(o)),'tau0') && ~isempty(W_init.track(H-tq(o)).tau0)
          W_init.track(H-tq(o)).tau0(W_init.track(H-tq(o)).tau0==J_q(o))=NaN; % si toglie dai falsi allarmi se era presente, ponendo NaN al suo posto
        end       
   	   W_init.track(H-tq(o)).tau(K1).islast=[];
       W_init.track(H-tq(o)).tau(K1).AAA='mossa1'; %%%%%%%%%%%%
   end

end

W_init.track(H-tq(tqcounter-1)).tau(K1).islast=1;


Out=W_init;

end

