function best_subspaces=dt_build_fn(hw,cp)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Buildingtherootnode
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 yy=[ones(1,size(hw,1)) zeros(1,size(cp,1))];
 xx=[hw;cp];

 for ii=1:size(xx,1)
   [slx(ii),fmx(ii),igx{ii}]=calc_ig_fn(xx(ii,:),yy);
 end

 fmxsort=sort(fmx,descend);
 tmp1=find(fmx==fmxsort(1));
 f1=tmp1(1);
 fmx(f1)=0;
 tmp2=find(fmx==fmxsort(2));
 f2=tmp2(1);
 fval=xx(f1,slx(f1));


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Splitting the root node
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 idxL=find(xx(f1,:)<fval);
 idxR=find(xx(f1,:)>=fval);

 xxL=xx(:,idxL);
 xxR=xx(:,idxR);

 yyL=yy(idxL);
 yyR=yy(idxR);

 fprintf(\n);
 fprintf(Left side class 1 = %d\n,sum(yyL));
 fprintf(Left side class 0 = %d\n\n,length(yyL)-sum(yyL));

 fprintf(Right side class 1 = %d\n,sum(yyR));
 fprintf(Right side class 0 = %d\n,length(yyR)-sum(yyR));


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Building the left node
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 for ii=1:size(xxL,1)
   [slxL(ii),fmxL(ii),igxL{ii}]=calc_ig(xxL(ii,:),yyL);
 end

 fmxsortL=sort(fmxL,descend);
 tmp3=find(fmxL==fmxsortL(1));
 f1L=tmp3(1);
 fmxL(f1L)=0;
 tmp4=find(fmxL==fmxsortL(2));
 f2L=tmp4(1);
 fvalL=xx(f1L,slxL(f1L));


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Splitting the left node
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 idxLL=find(xxL(f1L,:)<fvalL);
 idxRL=find(xxL(f1L,:)>=fvalL);

 xxLL=xxL(:,idxLL);
 xxRL=xxL(:,idxRL);

 yyLL=yyL(idxLL);
 yyRL=yyL(idxRL);

 fprintf(\n);
 fprintf(Left side class 1 = %d\n,sum(yyLL));
 fprintf(Left side class 0 = %d\n\n,length(yyLL)-sum(yyLL));

 fprintf(Right side class 1 = %d\n,sum(yyRL));
 fprintf(Right side class 0 = %d\n,length(yyRL)-sum(yyRL));


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Building the right node
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 for ii=1:size(hw,2)
   [slxR(ii),fmxR(ii),igxR{ii}]=calc_ig(xxR(ii,:),yyR);
 end

 fmxsortR=sort(fmxR,descend);
 tmp5=find(fmxR==fmxsortR(1));
 f1R=tmp5(1);
 fmxR(f1R)=0;
 tmp6=find(fmxR==fmxsortR(2));
 f2R=tmp6(1);
 fvalR=xx(f1R,slxR(f1R)); %%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Splitting the right node
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 idxLR=find(xxR(f1R,:)<fvalR);
 idxRR=find(xxR(f1R,:)>=fvalR);

 xxLR=xxR(:,idxLR);
 xxRR=xxR(:,idxRR);

 yyLR=yyR(idxLR);
 yyRR=yyR(idxRR);

 fprintf(\n);
 fprintf(Left side class 1 = %d\n,sum(yyLR));
 fprintf(Left side class 0 = %d\n\n,length(yyLR)-sum(yyLR));

 fprintf(Right side class 1 = %d\n,sum(yyRR));
 fprintf(Right side class 0 = %d\n,length(yyRR)-sum(yyRR));
 fprintf(===============================================\n);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Printing root node and split
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 figure; grid on;
 for ii=1:size(xx,2)
   if(yy(ii)==1)
     hold on;plot(xx(f1,ii),xx(f2,ii),.);
   else
     hold on;plot(xx(f1,ii),xx(f2,ii),r.);
   end
 end
 hold on;line([fval fval],[0 250]);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Printing left node and split
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 figure; grid on;
 for ii=1:size(xxL,2)
   if(yyL(ii)==1)
     hold on;plot(xxL(f1L,ii),xxL(f2L,ii),.);
   else
     hold on;plot(xxL(f1L,ii),xxL(f2L,ii),r.);
   end
 end
 hold on;line([fvalL fvalL],[0 250]);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Printing right node and split
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 figure; grid on;
 for ii=1:size(xxR,2)
   if(yyR(ii)==1)
     hold on;plot(xxR(f1R,ii),xxR(f2R,ii),.);
   else
     hold on;plot(xxR(f1R,ii),xxR(f2R,ii),r.);
   end
 end
 hold on;line([fvalR fvalR],[0 250]);

 best_subspaces=[f1 f2; f1L f2L; f1R f2R];

end