Exemple #1
0
void Restaurant::initializePatrons(void) {

	// how many patrons?
	if (assumingAdmixture == false)
		numPatrons = observationsPtr->getNumIndividuals();
	else if (assumingAdmixture == true && individualsInRestaurant == -1)
		numPatrons = observationsPtr->getNumIndividuals() * observationsPtr->getTotalNumAlleleCopies();
	else if (assumingAdmixture == true && individualsInRestaurant >= 0)
		numPatrons = observationsPtr->getTotalNumAlleleCopies();
		
	// allocate the patrons
	patrons = new Patron*[numPatrons];

	// set the index information for each patron
	if (assumingAdmixture == false)
		{
		for (int i=0; i<numPatrons; i++)
			{
			patrons[i] = new PatronIndividual( observationsPtr, i, observationsPtr->getNumLoci(), observationsPtr->getNumUniqueAlleles() );
			patrons[i]->setIndex(i);
			patrons[i]->setIndividual(i);
			}
		}
	else if (assumingAdmixture == true && individualsInRestaurant == -1)
		{
		for (int i=0, m=0; i<observationsPtr->getNumIndividuals(); i++)
			{
			for (int j=0; j<observationsPtr->getNumLoci(); j++)
				{
				int ploidy = 1;
				if (observationsPtr->getIsDiploid(j) == true)
					ploidy = 2;
				for (int k=0; k<ploidy; k++)
					{
					patrons[m] = new PatronAllele( observationsPtr, m, i, j, k, observationsPtr->getNumUniqueAllelesAtLocus(j) );
					m++;
					}
				}
			}
		}
	else if (assumingAdmixture == true && individualsInRestaurant >= 0)
		{
		for (int j=0, m=0; j<observationsPtr->getNumLoci(); j++)
			{
			int ploidy = 1;
			if (observationsPtr->getIsDiploid(j) == true)
				ploidy = 2;
			for (int k=0; k<ploidy; k++)
				{
				patrons[m] = new PatronAllele( observationsPtr, m, individualsInRestaurant, j, k, observationsPtr->getNumUniqueAllelesAtLocus(j) );
				m++;
				}
			}
		}
		
	// set the data for each patron
	for (int i=0; i<numPatrons; i++)
		{
		Patron *p = patrons[i];
		int elemIdx = p->getIndividual();
		p->setData( observationsPtr->getPtrToIndividual(elemIdx) );
		}

	// set the ln likelihood for each data element when placed in a population by itself
	for (int i=0; i<numPatrons; i++)
		{
		Patron *p = patrons[i];
		double x = lnLikelihoodNewTable(p);
		p->setLnLikelihoodAlone(x);
		}		
}