diff egglib/egglib-2.1.5/include/egglib-cpp/Population.hpp @ 1:420b57c3c185 draft

Uploaded
author dereeper
date Fri, 10 Jul 2015 04:39:30 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/egglib/egglib-2.1.5/include/egglib-cpp/Population.hpp	Fri Jul 10 04:39:30 2015 -0400
@@ -0,0 +1,143 @@
+/*
+    Copyright 2009-2010 Stéphane De Mita, Mathieu Siol
+
+    This file is part of the EggLib library.
+
+    EggLib is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    EggLib 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with EggLib.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef EGGLIB_POPULATION_HPP
+#define EGGLIB_POPULATION_HPP
+
+
+#include "Edge.hpp"
+
+namespace egglib {
+
+    class Random;
+
+   /** \brief Handles a single population
+    *
+    * \ingroup coalesce
+    *
+    */
+    class Population {
+
+        public:
+    
+           /** \brief Default constructor
+            *
+            * Generates an empty population.
+            * 
+            */
+            Population();
+            
+           /** \brief Copy constructor
+            * 
+            */
+            Population(const Population& source);
+            
+           /** \brief Assignment operator
+            * 
+            */
+            Population& operator=(const Population& source);
+            
+           /** \brief Destructor
+            * 
+            * The object only cleans Edge objects currently stored in it.
+            *
+            */
+            ~Population();
+
+           /** \brief Standard constructor
+            * 
+            * The Edge instances will be handled by address and they
+            * MUST be passed using the method set().
+            * 
+            * \param numberOfSegments number of recombining segments.
+            * 
+            * \param numberOfLineages the number of lineages contained
+            * in this population.
+            * 
+            * \param firstIndex the absolute index (or ID) of the first
+            * lineage (the other will have consecutive incremented
+            * ID's).
+            *
+            */
+            Population(unsigned int numberOfSegments,
+                    unsigned int numberOfLineages, unsigned firstIndex);
+
+           /** \brief Gets the number of lineages
+            * 
+            */
+            unsigned int numberOfLineages() const;
+            
+           /** \brief Gets the efficient number of lineages
+            * 
+            * The number of lineages is multiplied by the number of
+            * covered segments of each lineages.
+            * 
+            */
+            unsigned int efficientNumberOfLineages() const;            
+            
+           /** \brief Sets the Edge of a lineage
+            * 
+            * \param index the index of the lineage within the
+            * population.
+            * \param edge the address of the Edge instance representing
+            * the lineage.
+            *
+            */
+            void set(unsigned int index, Edge* edge);
+
+           /** \brief Removes and returns a random lineage.
+            * 
+            * \param random pointer to simulator's random generator
+            * instance.
+            * 
+            */
+            Edge* extractRandomly(Random* random);
+
+           /** \brief Removes and returns a given lineage.
+            * 
+            * \param index the relative index of the lineage.
+            * 
+            */
+            Edge* extractByIndex(unsigned int index);
+
+           /** \brief Appends a lineage to the object
+            * 
+            */
+            void push(Edge* edge);
+
+           /** \brief Gets coverage
+            * 
+            */
+            unsigned int coverage(unsigned int edgeIndex) const;
+
+
+        private:
+
+            void copy(const Population& source);
+            void clear();
+            Edge* pick(unsigned int index);
+            void init();
+            unsigned int _numberOfLineages;
+            unsigned int _efficientNumberOfLineages;
+            Edge** lineages;
+    };
+
+}
+
+#endif