snpBasicStatcPedFiles.PruebaLeerArchivo.java Source code

Java tutorial

Introduction

Here is the source code for snpBasicStatcPedFiles.PruebaLeerArchivo.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package snpBasicStatcPedFiles;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import jdk.jfr.events.FileWriteEvent;
import org.json.JSONArray;
import snpBasicStatc.Gen;
import snpBasicStatc.SNP;

/**
 *
 * @author Loena
 */
public class PruebaLeerArchivo {

    //JSONArray que almacena los SNP con sus respectivos clculos
    private JSONArray snpJsonArray;
    private String ruta;

    ArrayList<Particiones> arregloParticiones;

    //Guarda la categorizacion de lso SNPS
    public static ArrayList<SNP> snpArray;

    public SNP temposnp = null;
    String[] fileDetail;
    int contlineas = 0;
    //Procesor number in java
    int cores = Runtime.getRuntime().availableProcessors();

    //Load procesor in java
    double man = ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage();

    int totalSNP;
    String linea;
    ArrayList<String> textoArchivo;
    ArrayList<ProcesarSNPBasico> arregloProcesosSNPBasico;
    ArrayList<ProcesarSNPRestoIndividuos> arregloProcesosSNPResto;

    long time_start, time_end;

    //
    public PruebaLeerArchivo() {
        textoArchivo = new ArrayList<>();
        snpArray = new ArrayList<SNP>();
        arregloParticiones = new ArrayList<>();

        this.snpJsonArray = new JSONArray();

    }

    public static ArrayList<SNP> getSnpArray() {
        return snpArray;
    }

    //Mtodo que lee de datos de un archivo 

    public ArrayList<String> leer_Archivo(String direccion) {
        try {
            BufferedReader archivo = new BufferedReader(new FileReader(new File(direccion)));
            int control = 0;
            while ((linea = archivo.readLine()) != null) {
                //textoArchivo.add(linea+"\n");
                if (control == 0) {

                    fileDetail = linea.split("\t");
                    System.out.println("Tamao de la cadena a procesar  " + fileDetail.length);
                    totalSNP = fileDetail.length - 6;
                    ProcesarPrimeraLinea();

                    control++;
                } else {

                    fileDetail = linea.split("\t");
                    ProcesarSiguientesLineas();
                    time_end = System.currentTimeMillis();

                }
            }
            archivo.close();
        } catch (Exception ex) {
            System.out.println("Error: F1 " + ex.getLocalizedMessage());
            ex.printStackTrace();
            System.exit(0);
        }
        return textoArchivo;
    }

    public void partirSNPS() {

        int particion = totalSNP / cores;
        System.out.println("CORES: " + cores + ", Particion: " + particion);
        int inicioP;
        int finalP;
        Particiones p;
        for (int i = 0; i < cores; i++) {
            inicioP = i * particion;

            if (i == cores - 1) {
                finalP = totalSNP;
            } else {
                finalP = (i + 1) * particion;
            }
            p = new Particiones(inicioP, finalP);
            arregloParticiones.add(p);
        }

        /*
        for(Particiones pp:arregloParticiones)
        {
        System.out.println(pp.toString());
        }
        */

    }

    public void ProcesarPrimeraLinea() {
        partirSNPS();
        //
        ProcesarSNPBasico basico;
        arregloProcesosSNPBasico = new ArrayList<ProcesarSNPBasico>();
        //for(int i=0;i<arregloParticiones.size();i++)
        for (Particiones p : arregloParticiones) {

            basico = new ProcesarSNPBasico(fileDetail, snpArray, p.inicioP + 6, p.finalP + 6);
            arregloProcesosSNPBasico.add(basico);
        }

        for (int i = 0; i < arregloProcesosSNPBasico.size(); i++) {

            arregloProcesosSNPBasico.get(i).start();
            try {
                arregloProcesosSNPBasico.get(i).join();

            } catch (InterruptedException ex) {
                Logger.getLogger(PruebaLeerArchivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        arregloProcesosSNPBasico.clear();
        arregloProcesosSNPBasico = null;
    }//Fin del mtodo   

    public void ProcesarSiguientesLineas()
    //Inicio
    {
        //System.out.println("Entre a procesar el resto de lineas");

        //for(Particiones p:arregloParticiones)
        ProcesarSNPRestoIndividuos resto = null;
        arregloProcesosSNPResto = new ArrayList<ProcesarSNPRestoIndividuos>();
        for (Particiones p : arregloParticiones) {

            resto = new ProcesarSNPRestoIndividuos(fileDetail, snpArray, p.inicioP, p.finalP);
            arregloProcesosSNPResto.add(resto);
        }

        for (int i = 0; i < arregloProcesosSNPResto.size(); i++)

        {
            arregloProcesosSNPResto.get(i).start();
            try {
                arregloProcesosSNPResto.get(i).join();

            } catch (InterruptedException ex) {
                Logger.getLogger(PruebaLeerArchivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        //System.gc();
        arregloProcesosSNPResto.clear();
        arregloProcesosSNPResto = null;
    }//Find del Mtodo

    public String procesar(String rutaArchivoPed) {
        long time_Start_escritura = System.currentTimeMillis();
        String nombreArchivo = new File(rutaArchivoPed).getName();
        // Ruta para cuando se ejecuta en Linux:
        //String ruta = String.format( "/home/santiago/snpJsonArray_%s.json", nombreArchivo.replace(".ped", "") );
        // Ruta para cuando se ejecuta en Windows:
        String ruta = String.format("D:\\snpJsonArray_%s.json", nombreArchivo.replace(".tmp", ""));
        // En Windows, los archivos temporales que gestiona Apache tienen extension .tmp, en Linux no quedan con extensin

        FileWriter writer;
        try {
            writer = new FileWriter(ruta);
            writer.write("[");
            writer.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        long time_start, time_end;
        time_start = System.currentTimeMillis();
        leer_Archivo(rutaArchivoPed);
        time_end = System.currentTimeMillis();
        System.out.println("Tiempo de Procesar ARchivo " + (time_end - time_start) + " milliseconds");
        ProcesamientoPED ped;
        ProcesamientoPED[] arregloProcesamientoPed = new ProcesamientoPED[arregloParticiones.size()];
        Particiones p;
        System.out.println("tamano arreglo particiones  " + arregloParticiones.size());
        for (int i = 0; i < arregloParticiones.size(); i++) {
            p = arregloParticiones.get(i);
            ped = new ProcesamientoPED(snpArray, p.inicioP, p.finalP, ruta, snpJsonArray,
                    (fileDetail.length - 6) - 1);
            arregloProcesamientoPed[i] = ped;

            /*
            try {
            ped= new ProcesamientoPED(snpArray, p.inicioP, p.finalP, cadena);                
            ped.start();
            ped.join();
            } catch (InterruptedException ex) {
            Logger.getLogger(PruebaLeerArchivo.class.getName()).log(Level.SEVERE, null, ex);
            } 
            */
        }

        for (ProcesamientoPED procesamientoPed : arregloProcesamientoPed) {
            procesamientoPed.start();
            try {
                procesamientoPed.join();
            } catch (InterruptedException ex) {
                Logger.getLogger(PruebaLeerArchivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        try {
            writer = new FileWriter(ruta, true);
            writer.append("]");
            writer.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        long time_End_escritura = System.currentTimeMillis();
        System.out.println("---------------------------------IMPORTANTEEEE: TTiempo Finalizacion Escritura: "
                + (time_End_escritura - time_Start_escritura) + " ms ---------------------------------");
        arregloProcesamientoPed = null;
        return ruta;
        //return snpJsonArray;        
    }

    /*
    private String escribirResultado( String rutaSnpJsonArray, JSONArray snpJsonArray ){
    File temp = new File( rutaSnpJsonArray );
    System.out.println( "Ruta snpJsonArray.json: " + temp.getAbsolutePath() );
    try {
        FileWriter writer = new FileWriter( rutaSnpJsonArray );
        writer.write(  snpJsonArray.toString()  );
        writer.close();
        return temp.getAbsolutePath();
    } 
    catch (IOException ex) {
        ex.printStackTrace();
        return "";
    }
    }
    */

    public static void main(String[] args) {
        //pp.leer_Archivo("X:\\doctorado\\plink-1.07-x86_64\\datosPLINK\\hapmap1\\prueba.ped");
        //pp.leer_Archivo("/home/auribe/doctorado/plink-1.07-x86_64/datosPLINK/hapmap1/hapmap3_r1_b36_fwd.ASW.qc.poly.recode.ped");
        //

        PruebaLeerArchivo pp = new PruebaLeerArchivo();
        String archivo = "G:\\SANTI\\hastaSNP150000.ped";
        //String archivo = "D:\\Google Drive\\Semestre X - FINAL\\Trabajo de Grado - GWAS\\archivos de entrada\\hastaSNP8.ped";  //hastaSNP8.ped
        //String archivo = "/home/santiago/TG/hastaSNP8.ped";  //hastaSNP8.ped
        String rutaSnpJsonArray = pp.procesar(archivo);
        System.out.println(rutaSnpJsonArray);

        /*
        IMPORTANTEEE:
        Cambios Necesarios para ejecutar en las plataformas:
        LINUX Server:
            - Cambiar la ruta del archivo de entrada por: 
                  /home/santiago/hastaSNP8.ped, en PruebaLeerArchivo.main()
            
            - Cambiar la Ruta de almacenamiento del archivo .json con los clculos:  
                  "/home/santiago/snpJsonArray_%s.json" en PruebaLeerArchivo.procesar()
            
            - Cambiar el tamao del Java Heap Size:
                   Click derecho en el proyecto, Properties, Apartado Run, Campo VM Options y colocar -Xms20g -Xmx20g
            
        Windows:
            - Cambiar la ruta del archivo de entrada por: 
                  /home/santiago/hastaSNP8.ped, en PruebaLeerArchivo.main()
            
            - Cambiar la Ruta de almacenamiento del archivo .json con los clculos:  
                  "/home/santiago/snpJsonArray_%s.json" en PruebaLeerArchivo.procesar()
                
            - Cambiar el tamao del Java Heap Size:
                   Click derecho en el proyecto, Properties, Apartado Run, Campo VM Options y colocar -Xms1g -Xmx1g
                
        */

    }

}