ClassChristopher

import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Arrays; import java.util.Collections; 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); } /** * 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(); } } /** * 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; } /** * 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 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; } /** * 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); } /** * 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; } /** * 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; } /** * 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.