mx.unam.ecologia.gye.coalescence.app.CreateMicsatInput.java Source code

Java tutorial

Introduction

Here is the source code for mx.unam.ecologia.gye.coalescence.app.CreateMicsatInput.java

Source

//@license@
package mx.unam.ecologia.gye.coalescence.app;

import mx.unam.ecologia.gye.coalescence.model.CoalescentGenealogy;
import mx.unam.ecologia.gye.coalescence.model.UniParentalGene;
import mx.unam.ecologia.gye.coalescence.util.SimulationParameters;
import mx.unam.ecologia.gye.coalescence.visitors.MicrosatelliteMutationVisitor;
import mx.unam.ecologia.gye.model.CompoundSequence;
import mx.unam.ecologia.gye.model.Sequence;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.BasicConfigurator;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

/**
 * Provides a small application for generating Micsat input
 * files.
 * <p/>
 *
 * @author Dieter Wimberger (wimpi)
 * @version @version@ (@date@)
 */
public class CreateMicsatInput {

    private static final Log log = LogFactory.getLog(CreateMicsatInput.class);

    protected static final void writeMicsat(List leaves, String fname) {
        try {

            FileOutputStream fout = new FileOutputStream(fname);
            PrintWriter pw = new PrintWriter(fout);
            for (int i = 0; i < leaves.size(); i++) {
                UniParentalGene upgene = (UniParentalGene) leaves.get(i);
                CompoundSequence h = upgene.getCompoundSequence();
                int numloc = h.getSequenceCount();
                for (int n = 0; n < numloc; n++) {
                    Sequence s = h.get(n);
                    pw.print(s.getSize());
                    pw.print(" ");
                }
                pw.println();
            }
            pw.flush();
            pw.close();
            fout.close();
        } catch (IOException ex) {
            log.error("writeMicsat()", ex);
        }

    }//writeMicsat

    public static void main(String[] args) throws Exception {
        String fname = "micsat_data.dat";
        BasicConfigurator.configure();
        for (int i = 0; i < args.length; i++) {
            if (args[i].startsWith("-output=")) {
                fname = args[i].substring(8);
            }
        }
        SimulationParameters params = new SimulationParameters(args);

        log.info(params.toString());
        CoalescentGenealogy genea = new CoalescentGenealogy(params);
        MicrosatelliteMutationVisitor vis = new MicrosatelliteMutationVisitor(params);
        log.info("Generating Genealogy");
        genea.generate();
        log.info("Applying mutations");
        genea.getMRCA().setCompoundSequence(params.CompoundSequence());
        UniParentalGene.traverse(genea.getMRCA(), vis);
        log.info("Writing Micsat Input file");
        List leaves = genea.getLeaves();
        writeMicsat(leaves, fname);
        log.info("Done.");
    }//main

}//class MicrosatelliteSimulation