Code covered by the BSD License  

Highlights from
Genomic signature using FCGR

image thumbnail
from Genomic signature using FCGR by Jesús P. Mena-Chalco
Genomic signature using Chaos game representation of frequencies.

fcgr2(fastaFile, wordLen)
function M = fcgr2(fastaFile, wordLen)
% Genomic signature using Chaos game representation of frequencies (pseudo optimized version)
% 
%   Author: Jesus Mena

    MatrixOfWords = makeMatrixOfWords(wordLen);

    % Leemos la sequencia. Cada archivo FASTA solamente muestra un lado (strand)
    % de las 2 cintas del ADN. FCGR es dependiente del strand, de esa forma
    % en los calculos consideraremos ambos strands.
    sequenceA = readFastaFile(fastaFile);
    
    % Las frecuencias que deben ser considerados en los calculos deben de 
    % corresponder a ambas cintas de ADN, por ello calculamos la secuencia 
    % complementar. Eso quiere decir:
    
    % si sequence = ATCGCTTA, su secuencia complementar sera TAAGCGAT
    % Como fue obtenido eso? 
    % Recordemos que:
    % - A es complemento de T, y viceversa
    % - C es complemento de G, y viceversa
    %
    % Para nuestro ejemplo:
    %   ATCGCTTA  (sentido ->) right strand o 5'
    %   TAGCGAAT  (sentido <-) left strand  o 3'
        
    sequenceB = buildComplementarDNA(sequenceA);
    
    % concatemos las 2 cintas en una sola
    % sequence = [sequenceA sequenceB];
    sequence = [sequenceA];
    
    % inicializamos matriz para el calculo de las frecuencias
    MatrixOfFrecuencies = zeros(size(MatrixOfWords));
      
    % inicializacin del pseudo-arbol
    for i=1:size(MatrixOfWords,1)
        for j=1:size(MatrixOfWords,1)
            
            pathOfTree = 'root';
            word = char(MatrixOfWords(i,j));
            
            for a=1:wordLen
                pathOfTree = [pathOfTree '.' word(a) ];
            end;
            
            eval([pathOfTree '=1;']);
        end;
    end;
    
    % calculo de las frecuencias para cada palabra en la secuencia dada
    n = length(sequence);
    possibilities = n-wordLen+1;
    
    for i=1:possibilities
        
        pathOfTree = 'root';
        
        for j=i:i+wordLen-1
            pathOfTree = [pathOfTree '.' sequence(j) ];
        end;
       
        eval([pathOfTree '=' pathOfTree '+1;']);
    end;
    
    % copiamos las frecuencias del rbol para la matriz de Frecuencias
    for i=1:size(MatrixOfWords,1)
        for j=1:size(MatrixOfWords,1)
            
            pathOfTree = 'root';
            word = char(MatrixOfWords(i,j));
            
            for a=1:wordLen
                pathOfTree = [pathOfTree '.' word(a) ];
            end;
            
            MatrixOfFrecuencies(i,j) = eval(pathOfTree)/possibilities;
        end;
    end;
    
    M = MatrixOfFrecuencies;
    
    % Mostramos la figura... para posterior analisis...
    %figure;
    %imagesc(M)
    %axis square;
    %axis off;
    %title(wordLen);
    %colorbar;
        
end

Contact us at files@mathworks.com