function [filesProc, errorC] = balanceDB(files, maxNumInd, maxNumSampleInd)
%init
errorC = 0;
filesProc = files;
%loop on files to compute num of samples for each ind
numSamplePerInd = zeros(numel(filesProc), 1); %larger init to be sure
for i = 1 : numel(filesProc)
filename = filesProc(i).name;
%class
[C, ~] = strsplit(filename, {'_', '.'});
ind = str2double(C{2}) + 1;
numSamplePerInd(ind) = numSamplePerInd(ind) + 1;
end %for i
%remove excess
im = find(numSamplePerInd, 1, 'last');
numSamplePerInd(im+1 : end) = [];
%remove individual without minimum number of samples
indexrem = [];
for i = 1 : numel(filesProc)
filename = filesProc(i).name;
%class
[C, ~] = strsplit(filename, {'_', '.'});
ind = str2double(C{2}) + 1;
if numSamplePerInd(ind) < maxNumSampleInd
indexrem = [indexrem i];
end %if numSamplePerInd(ind) == 1
end %for i
filesProc(indexrem) = [];
%check if there are enough
if numel(filesProc) < maxNumInd
errorC = -1;
return;
end %if numel(filesProc) < maxNumInd
%remove excess individuals
indexrem = [];
allInd = [];
for i = 1 : numel(filesProc)
filename = filesProc(i).name;
%class
[C, ~] = strsplit(filename, {'_', '.'});
ind = str2double(C{2}) + 1;
if numel(find(allInd == ind)) == 0
allInd = [allInd ind];
end %if numel
if numel(allInd) > maxNumInd
%we can remove the others
allInd(end) = [];
indexrem = i : numel(filesProc);
break;
end %if numInd > maxNumInd
end %for i
filesProc(indexrem) = [];
%discard samples in excess
indexrem = [];
numSamplePerInd = zeros(numel(filesProc), 1); %larger init to be sure
for i = 1 : numel(filesProc)
filename = filesProc(i).name;
%class
[C, ~] = strsplit(filename, {'_', '.'});
ind = str2double(C{2}) + 1;
numSamplePerInd(ind) = numSamplePerInd(ind) + 1;
if numSamplePerInd(ind) > maxNumSampleInd
indexrem = [indexrem i];
end %if numSamplePerInd(ind) > maxNumSampleInd
end %for i
filesProc(indexrem) = [];