/* * MicrosatelliteSimulator.java * * Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard * * This file is part of BEAST. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership and licensing. * * BEAST is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * BEAST is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with BEAST; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ package dr.app.seqgen; import dr.evolution.tree.Tree; import dr.evolution.tree.NodeRef; import dr.evolution.datatype.Microsatellite; import dr.evolution.alignment.Alignment; import dr.evolution.alignment.Patterns; import dr.evolution.sequence.Sequence; import dr.evolution.util.Taxa; import dr.oldevomodel.sitemodel.SiteModel; import dr.oldevomodel.sitemodel.GammaSiteModel; import dr.evomodel.branchratemodel.BranchRateModel; import dr.oldevomodel.substmodel.MicrosatelliteModel; /** * @author Chieh-Hsi Wu * * Simulates a pattern of microsatellites given a tree and microsatellite model * */ public class MicrosatelliteSimulator extends SequenceSimulator{ private Taxa taxa; private Microsatellite dataType; public MicrosatelliteSimulator( Microsatellite dataType, Taxa taxa, Tree tree, MicrosatelliteModel msatModel, BranchRateModel branchRateModel){ this(dataType, taxa, tree, new GammaSiteModel(msatModel), branchRateModel); } public MicrosatelliteSimulator( Microsatellite dataType, Taxa taxa, Tree tree, SiteModel siteModel, BranchRateModel branchRateModel) { super(tree, siteModel, branchRateModel, 1); this.dataType = dataType; this.taxa = taxa; } /** * Convert integer representation of microsatellite length to string. */ Sequence intArray2Sequence(int [] seq, NodeRef node) { String sSeq = ""+seq[0]; return new Sequence(m_tree.getNodeTaxon(node), sSeq); } // intArray2Sequence /** * Convert an alignment to a pattern */ public Patterns simulateMsatPattern(){ Alignment align = simulate(); int[] pattern = new int[align.getTaxonCount()]; for(int i = 0; i < pattern.length; i++){ String taxonName = align.getSequence(i).getTaxon().getId(); int index = taxa.getTaxonIndex(taxonName); pattern[index] = Integer.parseInt(align.getSequence(i).getSequenceString()); } Patterns patterns = new Patterns(dataType,taxa); patterns.addPattern(pattern); for(int i = 0; i < pattern.length;i++){ System.out.print(pattern[i]+","); } System.out.println(); return patterns; } }