codiceOrdinato

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.LinkedList; import java.util.List; /** * Classe che rappresenta una collezione di stringhe di DNA tutte ele stringhe * hanno la stessa lunghezza * * @author sandrof * */ public class DNAStrings { // rappresenta una lista di liste di nucleotidi private List<List<Nucleotide>> seq; // numero di stringhe presenti nella collezione private int t; // lunghezza di ciascuna stringa private int n; /** * Costruttore * * @param l * lista di liste di nucleotidi * @param nString * numero di stringhe * @param nNucleotid * numero di nucleotidi per ciascuna stringa */ public DNAStrings(List<List<Nucleotide>> l, int nString, int nNucleotid) { seq = l; t = nString; n = nNucleotid; } /** * Calcola il consenso di una lista di posizioni dalla prima alla posizione * index. Il consenso e' calcolato come somma dei consensi delle colonne * nella matrice di allineamento * * @param s * lista di posizioni * @param l * lunghezza delle stringhe per cui si calcola il consenso * @param index * posizione finale per cui si deve calcolare il consenso * @return la somma del consenso delle colonne della matrice di allineamento */ public int score(List<Integer> s, int l, int index) { Nucleotide[][] allignedMatrix = new Nucleotide[index][l]; for (int riga = 0; riga < index; riga++) { for (int colonna = 0; colonna < l; colonna++) { List<Nucleotide> dnaString = seq.get(riga); Integer displacement = s.get(riga); allignedMatrix[riga][colonna] = dnaString.get(displacement + colonna - 1); } } // print(allignedMatrix); // System.out.println(); return matrixScore(allignedMatrix, index); } /** * processa una stringa di caratteri e crea una corrispondente stringa di * nucleotidi * * @param line * stringa di caratteri * @return stringa di nucleotidi corrispondente */ private static List<Nucleotide> parse(String line) { List<Nucleotide> res = new LinkedList<Nucleotide>(); String upperCaseLine = line.toUpperCase(); for (int i = 0; i < upperCaseLine.length(); i++) { res.add(Nucleotide.parse(upperCaseLine.charAt(i))); } return res; } /** * Legge da file una collezione di stringhe di nucleotidi e crea un oggetto * DNAStrings * * @param br * buffered reader inizializzato sul file contenente la * collezione di stringhe * @return un oggetto DNAStrings opportunamente inizializzato * @throws IOException */ public static DNAStrings readFromFile(BufferedReader br) throws IOException { List<List<Nucleotide>> l = new LinkedList<List<Nucleotide>>(); String line = br.readLine(); int nString = 0; int nNucleotid = 0; while (line != null) { nNucleotid = line.length(); List<Nucleotide> dnaString = parse(line); l.add(dnaString); line = br.readLine(); nString++; } return new DNAStrings(l, nString, nNucleotid); } /*** * Calcola il profilo di consenso per un vettore di nucleotidi * * @param c * vettore di nucleotidi * @return il profilo di consenso */ private int[] getProfile(Nucleotide[] c) { int[] profile = new int[4]; for (int i = 0; i < c.length; i++) { switch (c[i]) { case A: profile[0]++; break; case C: profile[1]++; break; case G: profile[2]++; break; case T: profile[3]++; break; default: break; } } return profile; } /** * metodo di servizio: ritorna il massimo di un vettore di interi positivi * * @param profile * il vettore di interi * @return il masismo intero contenuto nel vettore */ private int getMax(int[] profile) { int max = 0; for (int i = 0; i < profile.length; i++) { if (max < profile[i]) { max = profile[i]; } } return max; } /** * Calcola il consenso data una matrice di allineamento fino alla riga index * * @param allignedMatrix * matrice di alineamento * @param index * riga fino alla quale si calcola il consenso * @return il consenso della matrice */ private int matrixScore(Nucleotide[][] allignedMatrix, int index) { int max = 0; // fisso la colonna for (int j = 0; j < allignedMatrix[0].length; j++) { // lunghezza tmp=index Nucleotide[] tmp = new Nucleotide[index]; // scorro tutta la riga index for (int i = 0; i < index; i++) { // alla posizione [i] assegno i valori della riga e della // colonna tmp[i] = allignedMatrix[i][j]; } int[] k = getProfile(tmp); max += getMax(k); } return max; } /** * Restituisce il numero di stringhe presenti nella collezione * * @return numero di stringhe presenti nella collezione */ public int getNumString() { return t; } /** * Restituisce il numero di nucleotidi presenti in ciascuna stringa * * @return numero di nucleotidi presenti in ciascuna stringa */ public int getNumNucleotid() { return n; } /** * Calcola il consenso di una lista di posizioni dalla prima alla posizione * index, e sovrastima il valore di consenso dalla riga index in poi. Il * consenso finale e' calcolato come somma dei consensi delle colonne nella * matrice di allineamento * * @param s * lista di posizioni * @param l * lunghezza delle stringhe per cui si calcola il consenso * @param index * posizione fino a cui calcola in maniera esatta il consenso * @return una sovrastima del consenso della matrice di allineamento */ public int optimisticScore(List<Integer> s, int l, int index) { System.out.println("Metodo da implementare"); return -1; } /** * stampa una matrice di nucelotidi * * @param allignedMatrix * matrice da stampare */ private void print(Nucleotide[][] allignedMatrix) { for (int i = 0; i < allignedMatrix.length; i++) { for (int j = 0; j < allignedMatrix[0].length; j++) { System.out.print(" " + allignedMatrix[i][j]); } System.out.println(); } } /** * metodo di test * */ public static void main(String[] args) { String filename = "dna-consenso.dat"; DNAStrings dnaFromFile = null; try { FileReader fr = new FileReader(filename); BufferedReader br = new BufferedReader(fr); dnaFromFile = readFromFile(br); System.out.println(dnaFromFile.seq); } catch (IOException e) { e.printStackTrace(); } List<Integer> s = new LinkedList<Integer>(); for (int i = 0; i < dnaFromFile.getNumString(); i++) { s.add(i, i + 1); } s.clear(); s.add(4); s.add(4); s.add(1); s.add(2); System.out.println(s); System.out.println("valore del consenso completo " + dnaFromFile.score(s, 6, s.size())); System.out.println("valore del consenso fino alla seconda stringa " + dnaFromFile.score(s, 6, 2)); System.out.println( "valore del consenso ottimistico fino alla seconda stringa " + dnaFromFile.optimisticScore(s, 6, 2)); } }

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.