%% Generátor čtení
% Slouží ke generování překrývajících se sekvencí o volitelné délce sekvencí, délce překryvů a libovolné chybovosti 
%NASTAVENI PARAMETRU
%slozka pro ukladani vytvorenych sekvenci
nazev_slozky='dataset/'; 
poc_cteni= 50; %pocet vytvořených čtení 
delka_cteni=100;
delka_prekryvu= [10 20 40 60 80];
chyba=3; % chybovost cteni [%]
%%
pocet_chyb=round(delka_cteni*chyba/100);
addpath(nazev_slozky);
% Načtení sekvence, ze které se budou vytvářet čtení
[~,sekv]=fastaread('sequence.fasta');
delka_s=length(sekv);
%%
%VYTVORENI CTENI
sada_cteni=struct([]);
for i = 1:length(delka_prekryvu)
    prekryv=delka_prekryvu(i);
    start=randi(delka_s-(delka_cteni*poc_cteni),1); 
for j=1:poc_cteni
        sek1=sekv(start:start+delka_cteni-1);
        start=start+delka_cteni-prekryv;
        %přidání chyb
        if chyba>0
        poz_chyb=randi(delka_cteni,pocet_chyb,1);
        for k=1:length(pocet_chyb)
        ind_chyb=poz_chyb(k);
        h_chyb=randi(4,1);
        if h_chyb==1 
            if sek1(ind_chyb)== 'A'
               sek1(ind_chyb)= 'G';
            else 
               sek1(ind_chyb)= 'A';
            end
        elseif h_chyb==2
             if sek1(ind_chyb)== 'C'
               sek1(ind_chyb)= 'T';
            else 
               sek1(ind_chyb)= 'C';
            end
        elseif h_chyb==3
             if sek1(ind_chyb)== 'G'
               sek1(ind_chyb)= 'A';
            else 
               sek1(ind_chyb)= 'G';
            end
        else
             if sek1(ind_chyb)== 'T'
               sek1(ind_chyb)= 'C';
            else 
               sek1(ind_chyb)= 'T';
             end
             
        end
        end
        end
    sada_cteni(j).Sequence=sek1;
    sada_cteni(j).Header=['Testovaci cteni o delce ' num2str(delka_cteni) ' chybovost ' num2str(chyba) ' % delka prekryvu- ' num2str(prekryv) 'cteni cislo ' num2str(j)];
end
%% Uložení vytvořených sekvencí
nazev_souboru=[num2str(poc_cteni) '-cteni-delka-' num2str(delka_cteni) '-chybovost ' num2str(chyba) ' % prekryv ' num2str(prekryv) '.fasta'];
fastawrite([nazev_slozky nazev_souboru], sada_cteni);
end 

