From: <ti...@us...> - 2011-10-14 18:18:34
|
Revision: 4321 http://simupop.svn.sourceforge.net/simupop/?rev=4321&view=rev Author: tiwcpe8 Date: 2011-10-14 18:18:26 +0000 (Fri, 14 Oct 2011) Log Message: ----------- Remove some #ifdef MUTANTALLELE in individual.cpp and population.cpp and try to use mutant_vector Modified Paths: -------------- branches/mutant_new/src/customizedTypes.c branches/mutant_new/src/individual.cpp branches/mutant_new/src/individual.h branches/mutant_new/src/mutant_vector.h branches/mutant_new/src/population.cpp branches/mutant_new/src/population.h branches/mutant_new/src/utility.cpp branches/mutant_new/src/utility.h Modified: branches/mutant_new/src/customizedTypes.c =================================================================== --- branches/mutant_new/src/customizedTypes.c 2011-10-13 18:58:37 UTC (rev 4320) +++ branches/mutant_new/src/customizedTypes.c 2011-10-14 18:18:26 UTC (rev 4321) @@ -53,13 +53,7 @@ { PyObject_VAR_HEAD // pointer to the beginning of the genotype -#ifdef MUTANTALLELE -// compressed_vectora * ob_iter; -// size_t idx; GenoIterator ob_iter; -#else - GenoIterator ob_iter; -#endif } arrayobject; /// CPPONLY @@ -74,12 +68,7 @@ assert(is_carrayobject(op)); ap = (arrayobject *)op; assert(i >= 0 && i < Py_SIZE(ap)); -#ifdef MUTANTALLELE - //return PyInt_FromLong((*ap->ob_iter)[ap->idx + i] ); return PyInt_FromLong(*(ap->ob_iter + i) ); -#else - return PyInt_FromLong(*(ap->ob_iter + i) ); -#endif } @@ -99,12 +88,7 @@ # ifdef BINARYALLELE *(ap->ob_iter + i) = (x != 0); # else -# ifdef MUTANTALLELE - //(*ap->ob_iter)[ap->idx + i] = Allele(x); *(ap->ob_iter + i) = Allele(x); -# else - *(ap->ob_iter + i) = Allele(x); -# endif # endif return 0; } @@ -131,12 +115,7 @@ /// CPPONLY -#ifdef MUTANTALLELE -//PyObject * newcarrayobject(compressed_vectora * genoPtr, Py_ssize_t begin, Py_ssize_t end); PyObject * newcarrayobject(GenoIterator begin, GenoIterator end); -#else -PyObject * newcarrayobject(GenoIterator begin, GenoIterator end); -#endif /// CPPONLY static void @@ -385,12 +364,7 @@ ihigh = ilow; else if (ihigh > Py_SIZE(a)) ihigh = Py_SIZE(a); -#ifdef MUTANTALLELE -// np = (arrayobject *)newcarrayobject(a->ob_iter, a->idx + ilow, a->idx + ihigh); np = (arrayobject *)newcarrayobject(a->ob_iter + ilow, a->ob_iter + ihigh); -#else - np = (arrayobject *)newcarrayobject(a->ob_iter + ilow, a->ob_iter + ihigh); -#endif if (np == NULL) return NULL; return (PyObject *)np; @@ -729,25 +703,6 @@ /// CPPONLY -#ifdef MUTANTALLELE -/* -PyObject * newcarrayobject(compressed_vectora * genoPtr, Py_ssize_t begin, Py_ssize_t end) -{ - // create an object and copy data - arrayobject * op; - - op = PyObject_New(arrayobject, &Arraytype); - if (op == NULL) { - PyObject_Del(op); - return PyErr_NoMemory(); - } - // - op->idx = begin; - op->ob_iter = genoPtr; - Py_SIZE(op) = end - begin; - return (PyObject *)op; -} -*/ PyObject * newcarrayobject(GenoIterator begin, GenoIterator end) { // create an object and copy data @@ -763,25 +718,8 @@ Py_SIZE(op) = end - begin; return (PyObject *)op; } -#else -PyObject * newcarrayobject(GenoIterator begin, GenoIterator end) -{ - // create an object and copy data - arrayobject * op; - op = PyObject_New(arrayobject, &Arraytype); - if (op == NULL) { - PyObject_Del(op); - return PyErr_NoMemory(); - } - // - op->ob_iter = begin; - Py_SIZE(op) = end - begin; - return (PyObject *)op; -} -#endif - /* defdict type *********************************************************/ typedef struct @@ -985,13 +923,7 @@ { PyObject_VAR_HEAD // pointer to the beginning of the genotype -#ifdef MUTANTALLELE -// compressed_vectora * ob_iter; -// size_t idx; GenoIterator ob_iter; -#else - GenoIterator ob_iter; -#endif } arrayobject; bool is_carrayobject(PyObject * op); @@ -1689,25 +1621,6 @@ /// CPPONLY -#ifdef MUTANTALLELE -/* -PyObject * newcarrayobject(compressed_vectora * genoPtr, Py_ssize_t begin, Py_ssize_t end) -{ - // create an object and copy data - arrayobject * op; - - op = PyObject_New(arrayobject, &Arraytype); - if (op == NULL) { - PyObject_Del(op); - return PyErr_NoMemory(); - } - // - op->idx = begin; - op->ob_iter = genoPtr; - Py_SIZE(op) = end - begin; - return (PyObject *)op; -} -*/ PyObject * newcarrayobject(GenoIterator begin, GenoIterator end) { // create an object and copy data @@ -1724,25 +1637,7 @@ return (PyObject *)op; } -#else -PyObject * newcarrayobject(GenoIterator begin, GenoIterator end) -{ - // create an object and copy data - arrayobject * op; - op = PyObject_New(arrayobject, &Arraytype); - if (op == NULL) { - PyObject_Del(op); - return PyErr_NoMemory(); - } - // - op->ob_iter = begin; - Py_SIZE(op) = end - begin; - return (PyObject *)op; -} -#endif - - typedef struct { PyDictObject dict; Modified: branches/mutant_new/src/individual.cpp =================================================================== --- branches/mutant_new/src/individual.cpp 2011-10-13 18:58:37 UTC (rev 4320) +++ branches/mutant_new/src/individual.cpp 2011-10-14 18:18:26 UTC (rev 4321) @@ -146,31 +146,16 @@ "A valid ploidy index has to be specified if chrom is non-positive"); if (p < 0) { CHECKRANGEGENOSIZE(idx); -#ifdef MUTANTALLELE return static_cast<UINT>(*(m_genoPtr + idx)); - //return static_cast<UINT>((*m_genoPtr)[m_genoIdx + idx]); -#else - return static_cast<UINT>(*(m_genoPtr + idx)); -#endif } else if (chrom < 0) { CHECKRANGEABSLOCUS(idx); CHECKRANGEPLOIDY(static_cast<size_t>(p)); -#ifdef MUTANTALLELE return static_cast<UINT>(*(m_genoPtr + idx + p * totNumLoci())); - //return static_cast<UINT>((*m_genoPtr)[m_genoIdx + idx + p * totNumLoci()]); -#else - return static_cast<UINT>(*(m_genoPtr + idx + p * totNumLoci())); -#endif } else { CHECKRANGELOCUS(chrom, idx); CHECKRANGEPLOIDY(static_cast<size_t>(p)); CHECKRANGECHROM(static_cast<size_t>(chrom)); -#ifdef MUTANTALLELE return static_cast<UINT>(*(m_genoPtr + idx + p * totNumLoci() + chromBegin(chrom))); - //return static_cast<UINT>((*m_genoPtr)[m_genoIdx + idx + p * totNumLoci() + chromBegin(chrom)]); -#else - return static_cast<UINT>(*(m_genoPtr + idx + p * totNumLoci() + chromBegin(chrom))); -#endif } } @@ -253,25 +238,11 @@ // has to be all chromosomes DBG_FAILIF(beginCh != 0 || endCh != numChrom(), ValueError, "If multiple ploidy are chosen, all chromosomes has to be chosen."); -#ifdef MUTANTALLELE -// return Allele_Vec_As_NumArray(m_genoPtr, m_genoIdx + beginP * totNumLoci(), -// m_genoIdx + endP * totNumLoci()); return Allele_Vec_As_NumArray(m_genoPtr + beginP * totNumLoci(), m_genoPtr + endP * totNumLoci()); -#else - return Allele_Vec_As_NumArray(m_genoPtr + beginP * totNumLoci(), - m_genoPtr + endP * totNumLoci()); -#endif } else -#ifdef MUTANTALLELE -// return Allele_Vec_As_NumArray(m_genoPtr, m_genoIdx + beginP * totNumLoci() + chromBegin(beginCh), -// m_genoIdx + beginP * totNumLoci() + chromEnd(endCh - 1)); return Allele_Vec_As_NumArray(m_genoPtr + beginP * totNumLoci() + chromBegin(beginCh), m_genoPtr + beginP * totNumLoci() + chromEnd(endCh - 1)); -#else - return Allele_Vec_As_NumArray(m_genoPtr + beginP * totNumLoci() + chromBegin(beginCh), - m_genoPtr + beginP * totNumLoci() + chromEnd(endCh - 1)); -#endif } @@ -337,12 +308,7 @@ "A valid ploidy index has to be specified if chrom is non-positive"); if (p < 0) { CHECKRANGEGENOSIZE(idx); -#ifdef MUTANTALLELE - //assignGenotype(*m_genoPtr, m_genoIdx + idx, allele); - *(m_genoPtr + idx) = allele; -#else - *(m_genoPtr + idx) = allele; -#endif + *(m_genoPtr + idx) = allele; //assignGenotype } else if (chrom < 0) { CHECKRANGEABSLOCUS(idx); CHECKRANGEPLOIDY(static_cast<size_t>(p)); @@ -400,18 +366,9 @@ size_t p = ploidys[i]; for (size_t j = 0; j < chroms.size(); ++j) { size_t chrom = chroms[j]; -#ifdef MUTANTALLELE -// size_t genoIdx = m_genoIdx + p * totNumLoci() + chromBegin(chrom); -// for (size_t i = 0; i < numLoci(chrom); i++, ++idx) -// assignGenotype(*m_genoPtr, genoIdx + i, ToAllele(geno[idx % sz])); GenoIterator ptr = m_genoPtr + p * totNumLoci() + chromBegin(chrom); for (size_t i = 0; i < numLoci(chrom); i++, ++idx) - *(ptr + i) = ToAllele(geno[idx % sz]); -#else - GenoIterator ptr = m_genoPtr + p * totNumLoci() + chromBegin(chrom); - for (size_t i = 0; i < numLoci(chrom); i++, ++idx) - *(ptr + i) = ToAllele(geno[idx % sz]); -#endif + *(ptr + i) = ToAllele(geno[idx % sz]); // assignGenotype } } } Modified: branches/mutant_new/src/individual.h =================================================================== --- branches/mutant_new/src/individual.h 2011-10-13 18:58:37 UTC (rev 4320) +++ branches/mutant_new/src/individual.h 2011-10-14 18:18:26 UTC (rev 4321) @@ -108,11 +108,7 @@ /// CPPONLY Individual(const Individual & ind) : GenoStruTrait(ind), m_flags(ind.m_flags), -#ifdef MUTANTALLELE -// m_genoPtr(ind.m_genoPtr), m_genoIdx(ind.m_genoIdx), -#else m_genoPtr(ind.m_genoPtr), -#endif m_infoPtr(ind.m_infoPtr) { } @@ -125,32 +121,12 @@ /// CPPONLY set genotype pointer (use if Allele*pos can not be determined during construction) -#ifdef MUTANTALLELE void setGenoPtr(GenoIterator pos) { m_genoPtr = pos; } -/* - void setGenoPtr(compressed_vectora * genoPtr, size_t pos) - { - m_genoPtr = genoPtr; - m_genoIdx = pos; - } - void setGenoPtr(compressed_vectora * genoPtr) - { - m_genoPtr = genoPtr; - } -*/ -#else - void setGenoPtr(GenoIterator pos) - { - m_genoPtr = pos; - } -#endif - - /// CPPONLY set pointer to individual info void setInfoPtr(InfoIterator pos) { @@ -168,27 +144,11 @@ /// @name readonly structural info //@{ -#ifdef MUTANTALLELE - /// CPPONLY index to alleles -/* - compressed_vectora * genoPtr() const - { - return m_genoPtr; - } - - size_t genoIdx() const - { - return m_genoIdx; - } -*/ - -#else /// CPPONLY pointer to alleles GenoIterator genoPtr() const { return m_genoPtr; } -#endif /// CPPONLY @@ -383,57 +343,7 @@ m_infoPtr[idx] = value; } -#ifdef MUTANTALLELE /// CPPONLY start of alleles -/* size_t genoBegin() const - { - return m_genoIdx; - } - - - /// CPPONLY end of allele - size_t genoEnd() const - { - return m_genoIdx + genoSize(); - } - - - /// CPPONLY start of allele of the pth set of chromosome - size_t genoBegin(size_t p) const - { - CHECKRANGEPLOIDY(p); - return m_genoIdx + p * totNumLoci(); - } - - - /// CPPONLY end of allele of the pth set of chromosome - size_t genoEnd(size_t p) const - { - CHECKRANGEPLOIDY(p); - return m_genoIdx + (p + 1) * totNumLoci(); - } - - - /// CPPONLY start of allele of the pth set of chromosome, chrom ch - size_t genoBegin(size_t p, size_t chrom) const - { - CHECKRANGEPLOIDY(p); - CHECKRANGECHROM(chrom); - return m_genoIdx + p * totNumLoci() + chromBegin(chrom); - - } - - - /// CPPONLY end of allele of the pth set of chromosome - size_t genoEnd(size_t p, size_t chrom) const - { - CHECKRANGEPLOIDY(p); - CHECKRANGECHROM(chrom); - return m_genoIdx + p * totNumLoci() + chromEnd(chrom); - - } -*/ - /// CPPONLY start of alleles GenoIterator genoBegin() const { return m_genoPtr; @@ -482,58 +392,6 @@ } - -#else - /// CPPONLY start of alleles - GenoIterator genoBegin() const - { - return m_genoPtr; - } - - - /// CPPONLY end of allele - GenoIterator genoEnd() const - { - return m_genoPtr + genoSize(); - } - - - /// CPPONLY start of allele of the pth set of chromosome - GenoIterator genoBegin(size_t p) const - { - CHECKRANGEPLOIDY(p); - return m_genoPtr + p * totNumLoci(); - } - - - /// CPPONLY end of allele of the pth set of chromosome - GenoIterator genoEnd(size_t p) const - { - CHECKRANGEPLOIDY(p); - return m_genoPtr + (p + 1) * totNumLoci(); - } - - - /// CPPONLY start of allele of the pth set of chromosome, chrom ch - GenoIterator genoBegin(size_t p, size_t chrom) const - { - CHECKRANGEPLOIDY(p); - CHECKRANGECHROM(chrom); - return m_genoPtr + p * totNumLoci() + chromBegin(chrom); - - } - - - /// CPPONLY end of allele of the pth set of chromosome - GenoIterator genoEnd(size_t p, size_t chrom) const - { - CHECKRANGEPLOIDY(p); - CHECKRANGECHROM(chrom); - return m_genoPtr + p * totNumLoci() + chromEnd(chrom); - - } -#endif - /// CPPONLY start of info InfoIterator infoBegin() const { @@ -636,13 +494,7 @@ mutable unsigned char m_flags; /// pointer to genotype. -#ifdef MUTANTALLELE GenoIterator m_genoPtr; - //compressed_vectora * m_genoPtr; - //size_t m_genoIdx; -#else - GenoIterator m_genoPtr; -#endif /// pointer to info InfoIterator m_infoPtr; Modified: branches/mutant_new/src/mutant_vector.h =================================================================== --- branches/mutant_new/src/mutant_vector.h 2011-10-13 18:58:37 UTC (rev 4320) +++ branches/mutant_new/src/mutant_vector.h 2011-10-14 18:18:26 UTC (rev 4321) @@ -28,16 +28,21 @@ m_container.resize(size); } - size_t size() { + void reserve (size_t size) + { + m_container.reserve(size); + } + + size_t size() const { return m_container.size(); } - mutant_vector<T>::iterator begin() + mutant_vector<T>::iterator begin() { return mutant_vector<T>::iterator(&m_container, 0); } - mutant_vector<T>::iterator end() + mutant_vector<T>::iterator end() { return mutant_vector<T>::iterator(&m_container, m_container.size()); } @@ -99,8 +104,34 @@ return true; return false; } + bool operator >= (const iterator & iter) const + { + if (m_index >= iter.m_index) + return true; + return false; + } + bool operator <= (const iterator & iter) const + { + if (m_index <= iter.m_index) + return true; + return false; + } + bool operator > (const iterator & iter) const + { + if (m_index > iter.m_index) + return true; + return false; + } + + bool operator < (const iterator & iter) const + { + if (m_index < iter.m_index) + return true; + return false; + } + typename compressed_vector<T>::reference operator* () { return (*m_container)[m_index]; @@ -197,8 +228,31 @@ { return m_container; } + + void deleted() + { + m_container->erase_element(m_index); + } + }; + void erase (mutant_vector<T>::iterator begin,mutant_vector<T>::iterator end) + { + mutant_vector<T>::iterator it = begin; + mutant_vector<T>::iterator it2 = end; + for(;it != end; ++it) { + it.deleted(); + } + it = begin; + if (end != this->end()) + for(it2 = end; it2 != this->end(); ++it2, ++it) { + *it = *it2; + } + // compressed vector doesn't decrease the size when it is erased. + // we have to resize it. + m_container.resize(m_container.size() - (end - begin)); + } + private: compressed_vector<T> m_container; }; @@ -220,12 +274,28 @@ size_t src_begin = *it_src_begin; size_t src_index = *it_src_begin != begin.getIndex() ? *it_src_begin - begin.getIndex() : 0; size_t dest_begin = *it_dest_begin; + size_t dest_index = it.getIndex() - *it_dest_begin; for (;it_src_begin != iend; ++it_src_begin) { - (*it.getContainer())[ ((*it_src_begin + src_index) - src_begin) + dest_begin ] = (*begin.getContainer())[*it_src_begin]; + (*it.getContainer())[ ((*it_src_begin + src_index) - src_begin) + dest_begin + dest_index ] = (*begin.getContainer())[*it_src_begin]; } } +inline void insert(vectora::iterator it, vectora::iterator begin, vectora::iterator end) +{ + compressed_vector<size_t>::index_array_type::iterator it_src_begin = begin.getIndexIterator(); + compressed_vector<size_t>::index_array_type::iterator iend = end.getIndexIterator(); + compressed_vector<size_t>::index_array_type::iterator it_dest_begin = it.getIndexIterator(); + size_t src_begin = *it_src_begin; + size_t src_index = *it_src_begin != begin.getIndex() ? *it_src_begin - begin.getIndex() : 0; + size_t dest_begin = *it_dest_begin; + size_t dest_index = it.getIndex() - *it_dest_begin; + for (;it_src_begin != iend; ++it_src_begin) { + (*it.getContainer()).push_back(((*it_src_begin + src_index) - src_begin) + dest_begin + dest_index, (*begin.getContainer())[*it_src_begin]); + } + } +} + # endif #endif Modified: branches/mutant_new/src/population.cpp =================================================================== --- branches/mutant_new/src/population.cpp 2011-10-13 18:58:37 UTC (rev 4320) +++ branches/mutant_new/src/population.cpp 2011-10-14 18:18:26 UTC (rev 4321) @@ -605,7 +605,7 @@ return NULL; } */ -/* + void Population::setGenotype(const uintList & genoList, vspID subPopID) { const vectoru & geno = genoList.elems(); @@ -614,24 +614,11 @@ syncIndPointers(); if (!subPop.valid()) { -#ifdef MUTANTALLELE -// size_t sz = geno.size(); -// for (size_t i = 0; i < popSize() * genoSize(); ++i) -// assignGenotype(m_genotype, i, ToAllele(geno[i % sz])); -// return; GenoIterator ptr = m_genotype.begin(); size_t sz = geno.size(); for (size_t i = 0; i < popSize() * genoSize(); ++i) - *(ptr++) = ToAllele(geno[i % sz]); + *(ptr++) = ToAllele(geno[i % sz]); //assignGenotype return; - -#else - GenoIterator ptr = m_genotype.begin(); - size_t sz = geno.size(); - for (size_t i = 0; i < popSize() * genoSize(); ++i) - *(ptr++) = ToAllele(geno[i % sz]); - return; -#endif } DBG_FAILIF(hasActivatedVirtualSubPop(), ValueError, @@ -642,36 +629,20 @@ size_t sz = geno.size(); if (!subPop.isVirtual()) { -#ifdef MUTANTALLELE -// size_t idx = genoBegin(sp, true); -// for (size_t i = 0; i < subPopSize(sp) * genoSize(); ++i) -// assignGenotype(m_genotype, idx+i, ToAllele(geno[i % sz])); GenoIterator ptr = genoBegin(sp, true); for (size_t i = 0; i < subPopSize(sp) * genoSize(); ++i) - *(ptr++) = ToAllele(geno[i % sz]); -#else - GenoIterator ptr = genoBegin(sp, true); - for (size_t i = 0; i < subPopSize(sp) * genoSize(); ++i) - *(ptr++) = ToAllele(geno[i % sz]); -#endif + *(ptr++) = ToAllele(geno[i % sz]); //assignGenotype } else { activateVirtualSubPop(subPop); IndIterator it = indIterator(sp); size_t i = 0; for (; it.valid(); ++it) -#ifdef MUTANTALLELE -// for (size_t git = it->genoBegin(); git != it->genoEnd(); ++git, ++i) -// assignGenotype(m_genotype, git, ToAllele(geno[i % sz])); for (GenoIterator git = it->genoBegin(); git != it->genoEnd(); ++git, ++i) - *git = ToAllele(geno[i % sz]); -#else - for (GenoIterator git = it->genoBegin(); git != it->genoEnd(); ++git, ++i) - *git = ToAllele(geno[i % sz]); -#endif + *git = ToAllele(geno[i % sz]); //assignGenotype deactivateVirtualSubPop(subPop.subPop()); } } -*/ + /* void Population::validate(const string & msg) const { @@ -685,8 +656,10 @@ ConstInfoIterator ib = m_info.begin(); ConstInfoIterator ie = m_info.end(); #ifdef MUTANTALLELE - size_t gb = 0; - size_t ge = m_genotype.size(); + //size_t gb = 0; + //size_t ge = m_genotype.size(); + ConstGenoIterator gb = m_genotype.begin(); + ConstGenoIterator ge = m_genotype.end(); #else ConstGenoIterator gb = m_genotype.begin(); ConstGenoIterator ge = m_genotype.end(); @@ -695,8 +668,10 @@ if (genoSize() > 0) { for (ConstIndIterator it = indIterator(); it.valid(); ++it) { #ifdef MUTANTALLELE - DBG_ASSERT(it->genoIdx() >= gb && it->genoIdx() < ge, SystemError, - msg + "Wrong genotype pointer"); + //DBG_ASSERT(it->genoIdx() >= gb && it->genoIdx() < ge, SystemError, + // msg + "Wrong genotype pointer"); +// DBG_ASSERT(it->genoPtr() >= gb && it->genoPtr() < ge, SystemError, +// msg + "Wrong genotype pointer"); #else DBG_ASSERT(it->genoPtr() >= gb && it->genoPtr() < ge, SystemError, msg + "Wrong genotype pointer"); @@ -1038,7 +1013,7 @@ return ret; } -/* + void Population::removeSubPops(const subPopList & subPops) { syncIndPointers(); @@ -1049,13 +1024,8 @@ size_t infoStep = infoSize(); RawIndIterator oldInd = m_inds.begin(); RawIndIterator newInd = m_inds.begin(); -#ifdef MUTANTALLELE - size_t oldPtr = 0; - size_t newPtr = 0; -#else GenoIterator oldPtr = m_genotype.begin(); GenoIterator newPtr = m_genotype.begin(); -#endif InfoIterator oldInfoPtr = m_info.begin(); InfoIterator newInfoPtr = m_info.begin(); @@ -1093,7 +1063,7 @@ if (oldInd != newInd) { *newInd = *oldInd; #ifdef MUTANTALLELE - copyGenotype(m_genotype, oldPtr, oldPtr + step, m_genotype, newPtr); + simuPOP::copy(oldPtr, oldPtr + step, newPtr); #else copy(oldPtr, oldPtr + step, newPtr); #endif @@ -1119,7 +1089,7 @@ // do not remove. if (oldPtr != newPtr) { #ifdef MUTANTALLELE - copyGenotype(m_genotype, oldPtr, oldPtr + step * spSize, m_genotype, newPtr); + simuPOP::copy(oldPtr, oldPtr + step * spSize, newPtr); #else copy(oldPtr, oldPtr + step * spSize, newPtr); #endif @@ -1136,29 +1106,19 @@ } // m_inds.erase(newInd, m_inds.end()); -#ifdef MUTANTALLELE - eraseGenotype(m_genotype, newPtr, m_genotype.size()); -#else m_genotype.erase(newPtr, m_genotype.end()); -#endif m_info.erase(newInfoPtr, m_info.end()); m_popSize = std::accumulate(new_size.begin(), new_size.end(), size_t(0)); setSubPopStru(new_size, new_spNames); // InfoIterator infoPtr = m_info.begin(); -#ifdef MUTANTALLELE - size_t idx = 0; - for (size_t i = 0; i < m_popSize; ++i, idx += step, infoPtr += infoStep) { - m_inds[i].setGenoPtr(&m_genotype, idx); -#else GenoIterator ptr = m_genotype.begin(); for (size_t i = 0; i < m_popSize; ++i, ptr += step, infoPtr += infoStep) { m_inds[i].setGenoPtr(ptr); -#endif m_inds[i].setInfoPtr(infoPtr); } } -*/ + /* void Population::removeMarkedIndividuals() { @@ -1315,7 +1275,7 @@ } */ -/* + size_t Population::mergeSubPops(const uintList & subPops, const string & name) { if (!name.empty() && m_subPopNames.empty()) @@ -1386,13 +1346,8 @@ size_t infoStep = infoSize(); vector<Individual> new_inds; vectorf new_info; -#ifdef MUTANTALLELE - compressed_vectora new_genotype; - new_genotype.reserve(step * popSize()); -#else vectora new_genotype; new_genotype.reserve(step * popSize()); -#endif new_inds.reserve(popSize()); new_info.reserve(infoStep * popSize()); @@ -1403,7 +1358,7 @@ // do not remove. new_inds.insert(new_inds.end(), rawIndBegin(src), rawIndEnd(src)); #ifdef MUTANTALLELE - insertGenotype(new_genotype, new_genotype.size(), m_genotype, genoBegin(src, true), genoEnd(src, true)); + simuPOP::insert(new_genotype.end(), genoBegin(src, true), genoEnd(src, true)); #else new_genotype.insert(new_genotype.end(), genoBegin(src, true), genoEnd(src, true)); #endif @@ -1424,20 +1379,14 @@ setSubPopStru(new_size, new_names); // InfoIterator infoPtr = m_info.begin(); -#ifdef MUTANTALLELE - size_t idx = 0; - for (size_t i = 0; i < m_popSize; ++i, idx += step, infoPtr += infoStep) { - m_inds[i].setGenoPtr(&m_genotype, idx); -#else GenoIterator ptr = m_genotype.begin(); for (size_t i = 0; i < m_popSize; ++i, ptr += step, infoPtr += infoStep) { m_inds[i].setGenoPtr(ptr); -#endif m_inds[i].setInfoPtr(infoPtr); } return sps[0]; } -*/ + /* void Population::addChromFrom(const Population & pop) { @@ -3661,15 +3610,8 @@ size_t is = infoSize(); size_t sz = genoSize(); -#ifdef MUTANTALLELE -// compressed_vectora tmpGenotype(m_popSize * genoSize()); -// size_t it = 0; vectora tmpGenotype(m_popSize * genoSize()); vectora::iterator it = tmpGenotype.begin(); -#else - vectora tmpGenotype(m_popSize * genoSize()); - vectora::iterator it = tmpGenotype.begin(); -#endif vectorf tmpInfo(m_popSize * infoSize()); vectorf::iterator infoPtr = tmpInfo.begin(); @@ -3679,21 +3621,14 @@ copyGenotype(ind->genoBegin(), it, sz); #else # ifdef MUTANTALLELE -// copyGenotype(*ind->genoPtr(), ind->genoBegin(), ind->genoEnd(), tmpGenotype, it); simuPOP::copy(ind->genoBegin(), ind->genoEnd(), it); # else copy(ind->genoBegin(), ind->genoEnd(), it); # endif #endif -#ifdef MUTANTALLELE -// ind->setGenoPtr(&tmpGenotype, it); ind->setGenoPtr(it); -#else - ind->setGenoPtr(it); -#endif it += sz; - copy(ind->infoBegin(), ind->infoEnd(), infoPtr); ind->setInfoPtr(infoPtr); infoPtr += is; Modified: branches/mutant_new/src/population.h =================================================================== --- branches/mutant_new/src/population.h 2011-10-13 18:58:37 UTC (rev 4320) +++ branches/mutant_new/src/population.h 2011-10-14 18:18:26 UTC (rev 4321) @@ -834,63 +834,6 @@ -#ifdef MUTANTALLELE -/* - compressed_vectora * genoPtr() - { - return &m_genotype; - } - - - size_t genoBegin(bool order) - { - DBG_FAILIF(hasActivatedVirtualSubPop(), ValueError, - "This function is not valid with an activated virtual subpopulation"); - - if (order && !indOrdered()) - syncIndPointers(); - - return 0; - } - - - /// CPPONLY - size_t genoEnd(bool order) - { - DBG_FAILIF(hasActivatedVirtualSubPop(), ValueError, - "This function is not valid with an activated virtual subpopulation"); - if (order && !indOrdered()) - syncIndPointers(); - - return m_genotype.size(); - } - - - /// CPPONLY - size_t genoBegin(size_t subPop, bool order) - { - DBG_FAILIF(hasActivatedVirtualSubPop(), ValueError, - "This function is not valid with an activated virtual subpopulation"); - CHECKRANGESUBPOP(subPop); - - syncIndPointers(order); - - return m_subPopIndex[subPop] * genoSize(); - } - - - /// CPPONLY - size_t genoEnd(size_t subPop, bool order) - { - DBG_FAILIF(hasActivatedVirtualSubPop(), ValueError, - "This function is not valid with an activated virtual subpopulation"); - CHECKRANGESUBPOP(subPop); - syncIndPointers(order); - - return m_subPopIndex[subPop + 1] * genoSize(); - } -*/ -#else /// CPPONLY allele iterator, go through all allels one by one, without subPop info /** if order, in order @@ -947,7 +890,6 @@ return m_genotype.begin() + m_subPopIndex[subPop + 1] * genoSize(); } -#endif #ifdef MUTANTALLELE @@ -1040,7 +982,7 @@ * <tt>subPopSize(subPop)*totNumLoci()*ploidy()</tt>. * <group>5-genotype</group> */ -// void setGenotype(const uintList & geno, vspID subPop = vspID()); + void setGenotype(const uintList & geno, vspID subPop = vspID()); //@} @@ -1084,7 +1026,7 @@ * This function only handles the present generation. * <group>7-manipulate</group> */ -// void removeSubPops(const subPopList & subPops); + void removeSubPops(const subPopList & subPops); /// CPPONLY // void removeMarkedIndividuals(); @@ -1121,7 +1063,7 @@ * function returns the ID of the merged subpopulation. * <group>7-manipulate</group> */ -// size_t mergeSubPops(const uintList & subPops = uintList(), const string & name = UnnamedSubPop); + size_t mergeSubPops(const uintList & subPops = uintList(), const string & name = UnnamedSubPop); /** Add all individuals, including ancestors, in \e pop to the current * population. Two populations should have the same genotypic structures Modified: branches/mutant_new/src/utility.cpp =================================================================== --- branches/mutant_new/src/utility.cpp 2011-10-13 18:58:37 UTC (rev 4320) +++ branches/mutant_new/src/utility.cpp 2011-10-14 18:18:26 UTC (rev 4321) @@ -114,12 +114,9 @@ #ifndef STANDALONE_EXECUTABLE // these functions are defined in customizedTypes.c which is included // in simuPOP_wrap.cpp -#ifdef MUTANTALLELE -//extern "C" PyObject * newcarrayobject(compressed_vectora * genoPtr, Py_ssize_t begin, Py_ssize_t end); + extern "C" PyObject * newcarrayobject(GenoIterator begin, GenoIterator end); -#else -extern "C" PyObject * newcarrayobject(GenoIterator begin, GenoIterator end); -#endif + extern "C" PyObject * PyDefDict_New(); extern "C" bool is_defdict(PyTypeObject * type); @@ -127,12 +124,8 @@ extern "C" int initCustomizedTypes(void); #else -# ifdef MUTANTALLELE -//PyObject * newcarrayobject(compressed_vectora * genoPtr, Py_ssize_t begin, Py_ssize_t end); + PyObject * newcarrayobject(GenoIterator, GenoIterator) -# else -PyObject * newcarrayobject(GenoIterator, GenoIterator) -# endif { return NULL; } @@ -1231,14 +1224,6 @@ } } -#ifdef MUTANTALLELE -//PyObject * Allele_Vec_As_NumArray(compressed_vectora * genoPtr,Py_ssize_t begin, Py_ssize_t end) -//{ -// PyObject * res = newcarrayobject(genoPtr, begin, end); -// -// DBG_FAILIF(res == NULL, ValueError, "Can not convert buf to Allele num array"); -// return res; -//} PyObject * Allele_Vec_As_NumArray(GenoIterator begin, GenoIterator end) { PyObject * res = newcarrayobject(begin, end); @@ -1246,17 +1231,8 @@ DBG_FAILIF(res == NULL, ValueError, "Can not convert buf to Allele num array"); return res; } -#else -PyObject * Allele_Vec_As_NumArray(GenoIterator begin, GenoIterator end) -{ - PyObject * res = newcarrayobject(begin, end); - DBG_FAILIF(res == NULL, ValueError, "Can not convert buf to Allele num array"); - return res; -} -#endif - string PyObj_AsString(PyObject * str) { #if PY_VERSION_HEX >= 0x03000000 Modified: branches/mutant_new/src/utility.h =================================================================== --- branches/mutant_new/src/utility.h 2011-10-13 18:58:37 UTC (rev 4320) +++ branches/mutant_new/src/utility.h 2011-10-14 18:18:26 UTC (rev 4321) @@ -988,12 +988,7 @@ void PyObj_As_IntArray(PyObject * obj, vectori & val); /// CPPONLY -#ifdef MUTANTALLELE -//PyObject * Allele_Vec_As_NumArray(compressed_vectora * genoPtr,Py_ssize_t begin, Py_ssize_t end); PyObject * Allele_Vec_As_NumArray(GenoIterator begin, GenoIterator end); -#else -PyObject * Allele_Vec_As_NumArray(GenoIterator begin, GenoIterator end); -#endif /// CPPONLY string PyObj_AsString(PyObject * str); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |