Mercurial > repos > dereeper > sniplay
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