Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

Revision e6a0334445b5755bb52a0d2209120ee4e251e7b4 authored by Joao Sollari Lopes on 13 November 2017, 18:32:56 UTC, committed by Joao Sollari Lopes on 13 November 2017, 18:32:56 UTC
First commit
0 parent
  • Files
  • Changes
  • af1b4d8
  • /
  • src
  • /
  • pop_samplepriors.c
Raw File Download

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • revision
  • directory
  • content
revision badge
swh:1:rev:e6a0334445b5755bb52a0d2209120ee4e251e7b4
directory badge
swh:1:dir:a574a6b710136758a352d12c14eaa4a6f2cefb24
content badge
swh:1:cnt:2df39fb78f1d5d3dde9434aad62919541c4f23aa

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • revision
  • directory
  • content
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
pop_samplepriors.c
/*
	@author:	joao lopes
	@workplace: Reading University
	@date: 		13th November 2008
*/
#include "interface.h"

/*
	This function fills the topology related variables
	
	@param pm   - structer with the parameters values
	@param nevt - number of time events
	@param ntop - type of topology chosen
	@param npop - number of populations
*/
int choosetop(struct params *pm,int nevt,int ntop,int npop);

int sampPriors(struct params *pm,char *outline1,FILE *out_mut,FILE *out_rec,int printMut,int printRec,int foundSTR,int foundSNP,char *ltype){
	int cpop,cevt,cloc,i,			//iterators
		error,						//gets the error type
		npop,						//number of populations
		nevt,						//number of events
		ntop,						//number of possible topologies
		nloc;						//number of loci
	double nmig,					//number of migrants for each tevent
		   mut_meanM,				//mutation prior parameter
		   mut_devM,				//mutation prior parameter
		   mut_meanS,				//mutation prior parameter
		   mut_devS,				//mutation prior parameter
		   rec_meanM,				//mutation prior parameter
		   rec_devM,				//mutation prior parameter
		   rec_meanS,				//mutation prior parameter
		   rec_devS,				//mutation prior parameter
		   *unsorted_tev;			//unsorted times of event (prior type 3 and 4)

	npop = pm->npop;
	nevt = pm->nevt;
	ntop = pm->ntop;
	nloc = pm->nloc;

	//Set topology parameters from priors
	if(npop>1){
		error = choosetop(pm,nevt,ntop,npop);
		if(error)
			return error;
	}
	else
		pm->topol = 0;
					
	/*Set Ne parameters from priors*/
	for(cevt=0;cevt<=nevt;++cevt){
		for(cpop=0;cpop<npop;++cpop){
			//uniformly between 2 limits
			if(P_psize[cevt][cpop].type==1){
				pm->psize[cevt][cpop] =  gfsr8()*(P_psize[cevt][cpop].p[1] - P_psize[cevt][cpop].p[0]) + P_psize[cevt][cpop].p[0];
			}
			//use generalized gamma
			else if(P_psize[cevt][cpop].type == 2){
				pm->psize[cevt][cpop] =  rgengamma(P_psize[cevt][cpop].p[0], P_psize[cevt][cpop].p[1], P_psize[cevt][cpop].p[2], P_psize[cevt][cpop].p[3]);
			}
			// each anc pop is just done once
			if(cevt != 0)
				break;
		}
	}
	if(npop>1){
		/*Set tev parameters from priors*/
		if(P_t[0].type == 1 || P_t[0].type == 2){
			for(cevt=0;cevt<nevt;++cevt){
				//uniformly distributed
				if(P_t[cevt].type == 1)
					pm->tev[cevt] = gfsr8()*(P_t[cevt].p[1]-P_t[cevt].p[0])+P_t[cevt].p[0];	
				//generalized gamma distribution
				else if(P_t[cevt].type == 2)
					pm->tev[cevt] = rgengamma(P_t[cevt].p[0],P_t[cevt].p[1],P_t[cevt].p[2],P_t[cevt].p[3]);
				//to define next tev we allways sum the last one)
				if(cevt > 0) 
					pm->tev[cevt] = pm->tev[cevt-1] + pm->tev[cevt];
			}
		}
		else{
			unsorted_tev = (double*)malloc(nevt*sizeof(double));
			for(cevt=0;cevt<nevt;++cevt){
				//uniformly distributed (all tev)
				if(P_t[0].type == 3)
					unsorted_tev[cevt] = gfsr8()*(P_t[0].p[1]-P_t[0].p[0])+P_t[0].p[0];	
				//generalized gamma distribution (all tev)
				else if(P_t[0].type == 4)
					unsorted_tev[cevt] = rgengamma(P_t[0].p[0],P_t[0].p[1],P_t[0].p[2],P_t[0].p[3]);
			}
			//sort the sampled tev (type 3 and 4)
			shell_sort_double(unsorted_tev,nevt);
			for(cevt=0;cevt<nevt;++cevt){
				pm->tev[cevt] = unsorted_tev[cevt];
			}
		}
		//transform time(years) into time(generation)
		for(cevt=0;cevt<nevt;++cevt)
			pm->tev[cevt] /= pm->gent;
		//check for errors in the time values
		for(cevt=1 ; cevt<nevt ; ++cevt)
			if(pm->tev[cevt] <= pm->tev[cevt-1])
				return 28; //times not monotonic increasing
		/*Set migration parameters from priors*/
		for(cevt=0;cevt<nevt;++cevt){
			for(cpop=0;cpop<npop;++cpop){
				//no migration
				if (P_mig[cevt][cpop].type == 0)
					pm->mig[cevt][cpop] = 0;
				//uniform between 2 limits
				else if(P_mig[cevt][cpop].type == 1) 
					pm->mig[cevt][cpop] = gfsr8()*(P_mig[cevt][cpop].p[1]-P_mig[cevt][cpop].p[0]) + P_mig[cevt][cpop].p[0];
				//generalized gamma
				else if(P_mig[cevt][cpop].type == 2)
					pm->mig[cevt][cpop] = rgengamma(P_mig[cevt][cpop].p[0],P_mig[cevt][cpop].p[1],P_mig[cevt][cpop].p[2],P_mig[cevt][cpop].p[3]);
				//uniform between 2 limits on nmig
				else if(P_mig[cevt][cpop].type == 3){
					nmig = P_mig[cevt][cpop].p[0] + gfsr8()*(P_mig[cevt][cpop].p[1] - P_mig[cevt][cpop].p[0]);
					pm->mig[cevt][cpop] = nmig/pm->psize[cevt][cpop];
				}
				//generalized gamma on nmig
				else if(P_mig[cevt][cpop].type == 4){
					nmig = rgengamma(P_mig[cevt][cpop].p[0],P_mig[cevt][cpop].p[1],P_mig[cevt][cpop].p[2],P_mig[cevt][cpop].p[3]);
					pm->mig[cevt][cpop] = nmig/pm->psize[cevt][cpop];
				}
				// each anc pop is just done once
				if(cevt>0)
					break;
			}
		}
	}
	/*Set mutation parameters*/
	mut_meanM = 0.0;
	mut_devM = 0.0;
	mut_meanS = 0.0;
	mut_devS = 0.0;
	if(P_mutM.type!=0){
		mut_meanM = norm8()*P_mutM.p[1]+P_mutM.p[0];				
		mut_devM = fabs(norm8()*P_mutM.p[3]+P_mutM.p[2]);
	}
	if(P_mutS.type!=0){
		mut_meanS = norm8()*P_mutS.p[1]+P_mutS.p[0];				
		mut_devS = fabs(norm8()*P_mutS.p[3]+P_mutS.p[2]);		
	}
	for(cloc=0; cloc<nloc; ++cloc){
		if(ltype[cloc]=='m'||ltype[cloc]=='M'){
			if(P_mutM.type==0){
				pm->mu[cloc]=0.0;
			}
			else if(P_mutM.type==1){
				pm->mu[cloc] = pow(10.0,norm8()*mut_devM + mut_meanM);	
			}
            else if(P_mutM.type==2){
                pm->mu[cloc] = fabs(norm8()*mut_devM + mut_meanM);  
            }
		}
		else{
			if(P_mutS.type==0){
				pm->mu[cloc]=0.0;
			}
            else if(P_mutS.type==1){
                pm->mu[cloc] = pow(10.0,norm8()*mut_devS + mut_meanS);  
            }
            else if(P_mutS.type==2){
                pm->mu[cloc] = fabs(norm8()*mut_devS + mut_meanS);  
            }
		}
	}
	//print mutation rates into .mut file
	if(printMut){
		for(cloc=0;cloc<nloc;++cloc)
			fprintf(out_mut,"%e ",pm->mu[cloc]);
		fprintf(out_mut,"\n");
	}
	/*Set recombination parameters*/
	rec_meanM = 0.0;
	rec_devM = 0.0;
	rec_meanS = 0.0;
	rec_devS = 0.0;
	if(P_recM.type!=0){
		rec_meanM = norm8()*P_recM.p[1]+P_recM.p[0];				
		rec_devM = fabs(norm8()*P_recM.p[3]+P_recM.p[2]);
	}
	if(P_recS.type!=0){
		rec_meanS = norm8()*P_recS.p[1]+P_recS.p[0];				
		rec_devS = fabs(norm8()*P_recS.p[3]+P_recS.p[2]);		
	}
	for(cloc=0; cloc<nloc; ++cloc){
		if(ltype[cloc]=='m'||ltype[cloc]=='M'){
			if(P_recM.type==0){
				pm->rec[cloc]=0.0;
			}
			else if(P_recM.type==1){
				pm->rec[cloc] = pow(10.0,norm8()*rec_devM + rec_meanM);	
			}
            else if(P_recM.type==2){
                pm->rec[cloc] = fabs(norm8()*rec_devM + rec_meanM);  
            }
		}
		else{
			if(P_recS.type==0){
				pm->rec[cloc]=0.0;
			}
            else if(P_recS.type==1){
                pm->rec[cloc] = pow(10.0,norm8()*rec_devS + rec_meanS);  
            }
            else if(P_recS.type==2){
                pm->rec[cloc] = fabs(norm8()*rec_devS + rec_meanS);  
            }
		}
	}
	//print recombination rates into .mut file
	if(printRec){
		for(cloc=0;cloc<nloc;++cloc)
			fprintf(out_rec,"%e ",pm->rec[cloc]);
		fprintf(out_rec,"\n");
	}

	/*write parameters to output string*/	
	sprintf(outline1,"%d ",pm->topol);											//topology 
	if(P_top.type==3)
		sprintf(outline1+strlen(outline1),"%g ",P_top.p[0]);					//marker 
	else if(P_top.type==4)
		sprintf(outline1+strlen(outline1),"%g ",P_top.p[1]);					//marker 
	else if(P_top.type==5)
		sprintf(outline1+strlen(outline1),"%g ",P_top.p[2*nevt]);			    //marker 
	if(foundSTR)
		sprintf(outline1+strlen(outline1),"%g %g ",mut_meanM,mut_devM);	        //logmu_meanM logmu_devM
	if(foundSNP)
		sprintf(outline1+strlen(outline1),"%g %g ",mut_meanS,mut_devS);	        //logmu_meanS logmu_devS
	if(foundSTR)
		sprintf(outline1+strlen(outline1),"%g %g ",rec_meanM,rec_devM);	        //logmu_meanM logmu_devM
	if(foundSNP)
		sprintf(outline1+strlen(outline1),"%g %g ",rec_meanS,rec_devS);	        //logmu_meanS logmu_devS
	for(cevt=0;cevt<nevt;++cevt)
		sprintf(outline1+strlen(outline1),"%g ",pm->tev[cevt]*pm->gent);		//tev1*gent ...
	for(cevt=0;cevt<=nevt;++cevt){
		for(cpop=0;cpop<npop;++cpop){
			sprintf(outline1+strlen(outline1),"%g ",pm->psize[cevt][cpop]);		//ne1 ne2 ... nanc
			if(cevt!= 0)
				break;
		}
	}
	for(cevt=0;cevt<nevt;++cevt){
		for(cpop=0;cpop<npop;++cpop){
			sprintf(outline1+strlen(outline1),"%g ",pm->mig[cevt][cpop]);		// mig1 mig2 ... miganc
			if(cevt!= 0)
				break;
		}
	}

	/*free stuff*/
	if(npop>1){
		if(P_t[0].type == 3 || P_t[0].type == 4)
			free(unsorted_tev);
	}

	return 0;
	
}	// end of sample_from_priors

int choosetop(struct params *pm,int nevt,int ntop,int npop){
	int i;
	static int seq1[]  ={1,0,2,0,3,0,4,0},	//sequence of splitting no.1		
			   seq2[]  ={2,0,1,0,3,0,4,0},	//sequence of splitting no.2		
			   seq3[]  ={2,1,0,1,3,1,4,1},	//sequence of splitting no.3		
			   seq4[]  ={1,0,3,0,2,0,4,0},	//sequence of splitting no.4		
			   seq5[]  ={2,0,3,0,1,0,4,0},	//sequence of splitting no.5		
			   seq6[]  ={3,0,2,0,1,0,4,0},	//sequence of splitting no.6		
			   seq7[]  ={3,0,1,0,2,0,4,0},	//sequence of splitting no.7		
			   seq8[]  ={2,1,3,1,0,1,4,1},	//sequence of splitting no.8		
			   seq9[]  ={3,1,2,1,0,1,4,1},	//sequence of splitting no.9		
			   seq10[] ={3,1,0,1,2,1,4,1},	//sequence of splitting no.10		
			   seq11[] ={3,2,0,2,1,2,4,2},	//sequence of splitting no.11		
			   seq12[] ={3,2,1,2,0,2,4,2},	//sequence of splitting no.12		
			   seq13[] ={1,0,3,2,2,0,4,0},	//sequence of splitting no.13		
			   seq14[] ={2,0,3,1,1,0,4,0},	//sequence of splitting no.14		
			   seq15[] ={3,0,2,1,1,0,4,0},	//sequence of splitting no.15		
			   seq16[] ={2,3,0,1,1,3,4,3},	//sequence of splitting no.16		
			   seq17[] ={1,3,0,2,2,3,4,3},	//sequence of splitting no.17		
			   seq18[] ={1,2,0,3,2,3,4,3},	//sequence of splitting no.18		
			   seq19[] ={4,0,1,0,2,0,3,0},	//sequence of splitting no.19		
			   seq20[] ={4,1,1,0,2,0,3,0},	//sequence of splitting no.20		
			   seq21[] ={4,2,1,0,2,0,3,0},	//sequence of splitting no.21		
			   seq22[] ={4,3,1,0,2,0,3,0},	//sequence of splitting no.22		
			   seq23[] ={1,0,4,0,2,0,3,0},	//sequence of splitting no.23		
			   seq24[] ={1,0,4,2,2,0,3,0},	//sequence of splitting no.24		
			   seq25[] ={1,0,4,3,2,0,3,0},	//sequence of splitting no.25		
			   seq26[] ={1,0,2,0,4,0,3,0},	//sequence of splitting no.26		
			   seq27[] ={1,0,2,0,4,3,3,0},	//sequence of splitting no.27		
			   seq28[] ={4,0,2,0,1,0,3,0},	//sequence of splitting no.28		
			   seq29[] ={4,1,2,0,1,0,3,0},	//sequence of splitting no.29		
			   seq30[] ={4,2,2,0,1,0,3,0},	//sequence of splitting no.30		
			   seq31[] ={4,3,2,0,1,0,3,0},	//sequence of splitting no.31		
			   seq32[] ={2,0,4,0,1,0,3,0},	//sequence of splitting no.32		
			   seq33[] ={2,0,4,1,1,0,3,0},	//sequence of splitting no.33		
			   seq34[] ={2,0,4,3,1,0,3,0},	//sequence of splitting no.34		
			   seq35[] ={2,0,1,0,4,0,3,0},	//sequence of splitting no.35		
			   seq36[] ={2,0,1,0,4,3,3,0},	//sequence of splitting no.36		
			   seq37[] ={4,0,2,1,0,1,3,1},	//sequence of splitting no.37		
			   seq38[] ={4,1,2,1,0,1,3,1},	//sequence of splitting no.38		
			   seq39[] ={4,2,2,1,0,1,3,1},	//sequence of splitting no.39		
			   seq40[] ={4,3,2,1,0,1,3,1},	//sequence of splitting no.40		
			   seq41[] ={2,1,4,0,0,1,3,1},	//sequence of splitting no.41		
			   seq42[] ={2,1,4,1,0,1,3,1},	//sequence of splitting no.42		
			   seq43[] ={2,1,4,3,0,1,3,1},	//sequence of splitting no.43		
			   seq44[] ={2,1,0,1,4,1,3,1},	//sequence of splitting no.44		
			   seq45[] ={2,1,0,1,4,3,3,1},	//sequence of splitting no.45		
			   seq46[] ={4,0,1,0,3,0,2,0},	//sequence of splitting no.46		
			   seq47[] ={4,1,1,0,3,0,2,0},	//sequence of splitting no.47		
			   seq48[] ={4,2,1,0,3,0,2,0},	//sequence of splitting no.48		
			   seq49[] ={4,3,1,0,3,0,2,0},	//sequence of splitting no.49		
			   seq50[] ={1,0,4,0,3,0,2,0},	//sequence of splitting no.50		
			   seq51[] ={1,0,4,2,3,0,2,0},	//sequence of splitting no.51		
			   seq52[] ={1,0,4,3,3,0,2,0},	//sequence of splitting no.52		
			   seq53[] ={1,0,3,0,4,0,2,0},	//sequence of splitting no.53		
			   seq54[] ={1,0,3,0,4,2,2,0},	//sequence of splitting no.54		
			   seq55[] ={4,0,2,0,3,0,1,0},	//sequence of splitting no.55		
			   seq56[] ={4,1,2,0,3,0,1,0},	//sequence of splitting no.56		
			   seq57[] ={4,2,2,0,3,0,1,0},	//sequence of splitting no.57		
			   seq58[] ={4,3,2,0,3,0,1,0},	//sequence of splitting no.58		
			   seq59[] ={2,0,4,0,3,0,1,0},	//sequence of splitting no.59		
			   seq60[] ={2,0,4,1,3,0,1,0},	//sequence of splitting no.60		
			   seq61[] ={2,0,4,3,3,0,1,0},	//sequence of splitting no.61		
			   seq62[] ={2,0,3,0,4,0,1,0},	//sequence of splitting no.62		
			   seq63[] ={2,0,3,0,4,1,1,0},	//sequence of splitting no.63		
			   seq64[] ={4,0,3,0,2,0,1,0},	//sequence of splitting no.64		
			   seq65[] ={4,1,3,0,2,0,1,0},	//sequence of splitting no.65		
			   seq66[] ={4,2,3,0,2,0,1,0},	//sequence of splitting no.66		
			   seq67[] ={4,3,3,0,2,0,1,0},	//sequence of splitting no.67		
			   seq68[] ={3,0,4,0,2,0,1,0},	//sequence of splitting no.68		
			   seq69[] ={3,0,4,1,2,0,1,0},	//sequence of splitting no.69		
			   seq70[] ={3,0,4,2,2,0,1,0},	//sequence of splitting no.70		
			   seq71[] ={3,0,2,0,4,0,1,0},	//sequence of splitting no.71		
			   seq72[] ={3,0,2,0,4,1,1,0},	//sequence of splitting no.72		
			   seq73[] ={4,0,3,0,1,0,2,0},	//sequence of splitting no.73		
			   seq74[] ={4,1,3,0,1,0,2,0},	//sequence of splitting no.74		
			   seq75[] ={4,2,3,0,1,0,2,0},	//sequence of splitting no.75		
			   seq76[] ={4,3,3,0,1,0,2,0},	//sequence of splitting no.76		
			   seq77[] ={3,0,4,0,1,0,2,0},	//sequence of splitting no.77		
			   seq78[] ={3,0,4,1,1,0,2,0},	//sequence of splitting no.78		
			   seq79[] ={3,0,4,2,1,0,2,0},	//sequence of splitting no.79		
			   seq80[] ={3,0,1,0,4,0,2,0},	//sequence of splitting no.80		
			   seq81[] ={3,0,1,0,4,2,2,0},	//sequence of splitting no.81		
			   seq82[] ={4,0,2,1,3,1,0,1},	//sequence of splitting no.82		
			   seq83[] ={4,1,2,1,3,1,0,1},	//sequence of splitting no.83		
			   seq84[] ={4,2,2,1,3,1,0,1},	//sequence of splitting no.84		
			   seq85[] ={4,3,2,1,3,1,0,1},	//sequence of splitting no.85		
			   seq86[] ={2,1,4,0,3,1,0,1},	//sequence of splitting no.86		
			   seq87[] ={2,1,4,1,3,1,0,1},	//sequence of splitting no.87		
			   seq88[] ={2,1,4,3,3,1,0,1},	//sequence of splitting no.88		
			   seq89[] ={2,1,3,1,4,0,0,1},	//sequence of splitting no.89		
			   seq90[] ={2,1,3,1,4,1,0,1},	//sequence of splitting no.90		
			   seq91[] ={4,0,3,1,2,1,0,1},	//sequence of splitting no.91		
			   seq92[] ={4,1,3,1,2,1,0,1},	//sequence of splitting no.92		
			   seq93[] ={4,2,3,1,2,1,0,1},	//sequence of splitting no.93		
			   seq94[] ={4,3,3,1,2,1,0,1},	//sequence of splitting no.94		
			   seq95[] ={3,1,4,0,2,1,0,1},	//sequence of splitting no.95		
			   seq96[] ={3,1,4,1,2,1,0,1},	//sequence of splitting no.96		
			   seq97[] ={3,1,4,2,2,1,0,1},	//sequence of splitting no.97		
			   seq98[] ={3,1,2,1,4,0,0,1},	//sequence of splitting no.98		
			   seq99[] ={3,1,2,1,4,1,0,1},	//sequence of splitting no.99		
			   seq100[]={4,0,3,1,0,1,2,1},	//sequence of splitting no.100		
			   seq101[]={4,1,3,1,0,1,2,1},	//sequence of splitting no.101		
			   seq102[]={4,2,3,1,0,1,2,1},	//sequence of splitting no.102		
			   seq103[]={4,3,3,1,0,1,2,1},	//sequence of splitting no.103		
			   seq104[]={3,1,4,0,0,1,2,1},	//sequence of splitting no.104		
			   seq105[]={3,1,4,1,0,1,2,1},	//sequence of splitting no.105		
			   seq106[]={3,1,4,2,0,1,2,1},	//sequence of splitting no.106		
			   seq107[]={3,1,0,1,4,1,2,1},	//sequence of splitting no.107		
			   seq108[]={3,1,0,1,4,2,2,1},	//sequence of splitting no.108		
			   seq109[]={4,0,3,2,0,2,1,2},	//sequence of splitting no.109		
			   seq110[]={4,1,3,2,0,2,1,2},	//sequence of splitting no.110		
			   seq111[]={4,2,3,2,0,2,1,2},	//sequence of splitting no.111		
			   seq112[]={4,3,3,2,0,2,1,2},	//sequence of splitting no.112		
			   seq113[]={3,2,4,0,0,2,1,2},	//sequence of splitting no.113		
			   seq114[]={3,2,4,1,0,2,1,2},	//sequence of splitting no.114		
			   seq115[]={3,2,4,2,0,2,1,2},	//sequence of splitting no.115		
			   seq116[]={3,2,0,2,4,1,1,2},	//sequence of splitting no.116		
			   seq117[]={3,2,0,2,4,2,1,2},	//sequence of splitting no.117		
			   seq118[]={4,0,3,2,1,2,0,2},	//sequence of splitting no.118		
			   seq119[]={4,1,3,2,1,2,0,2},	//sequence of splitting no.119		
			   seq120[]={4,2,3,2,1,2,0,2},	//sequence of splitting no.120		
			   seq121[]={4,3,3,2,1,2,0,2},	//sequence of splitting no.121		
			   seq122[]={3,2,4,0,1,2,0,2},	//sequence of splitting no.122		
			   seq123[]={3,2,4,1,1,2,0,2},	//sequence of splitting no.123		
			   seq124[]={3,2,4,2,1,2,0,2},	//sequence of splitting no.124		
			   seq125[]={3,2,1,2,4,0,0,2},	//sequence of splitting no.125		
			   seq126[]={3,2,1,2,4,2,0,2},	//sequence of splitting no.126		
			   seq127[]={4,0,1,0,3,2,2,0},	//sequence of splitting no.127		
			   seq128[]={4,1,1,0,3,2,2,0},	//sequence of splitting no.128		
			   seq129[]={4,2,1,0,3,2,2,0},	//sequence of splitting no.129		
			   seq130[]={4,3,1,0,3,2,2,0},	//sequence of splitting no.130		
			   seq131[]={1,0,4,0,3,2,2,0},	//sequence of splitting no.131		
			   seq132[]={1,0,4,2,3,2,2,0},	//sequence of splitting no.132		
			   seq133[]={1,0,4,3,3,2,2,0},	//sequence of splitting no.133		
			   seq134[]={1,0,3,2,4,0,2,0},	//sequence of splitting no.134		
			   seq135[]={1,0,3,2,4,2,2,0},	//sequence of splitting no.135		
			   seq136[]={4,0,2,0,3,1,1,0},	//sequence of splitting no.136		
			   seq137[]={4,1,2,0,3,1,1,0},	//sequence of splitting no.137		
			   seq138[]={4,2,2,0,3,1,1,0},	//sequence of splitting no.138		
			   seq139[]={4,3,2,0,3,1,1,0},	//sequence of splitting no.139		
			   seq140[]={2,0,4,0,3,1,1,0},	//sequence of splitting no.140		
			   seq141[]={2,0,4,1,3,1,1,0},	//sequence of splitting no.141		
			   seq142[]={2,0,4,3,3,1,1,0},	//sequence of splitting no.142		
			   seq143[]={2,0,3,1,4,0,1,0},	//sequence of splitting no.143		
			   seq144[]={2,0,3,1,4,1,1,0},	//sequence of splitting no.144		
			   seq145[]={4,0,3,0,2,1,1,0},	//sequence of splitting no.145		
			   seq146[]={4,1,3,0,2,1,1,0},	//sequence of splitting no.146		
			   seq147[]={4,2,3,0,2,1,1,0},	//sequence of splitting no.147		
			   seq148[]={4,3,3,0,2,1,1,0},	//sequence of splitting no.148		
			   seq149[]={3,0,4,0,2,1,1,0},	//sequence of splitting no.149		
			   seq150[]={3,0,4,1,2,1,1,0},	//sequence of splitting no.150		
			   seq151[]={3,0,4,2,2,1,1,0},	//sequence of splitting no.151		
			   seq152[]={3,0,2,1,4,0,1,0},	//sequence of splitting no.152		
			   seq153[]={3,0,2,1,4,1,1,0},	//sequence of splitting no.153		
			   seq154[]={4,0,2,3,0,1,1,3},	//sequence of splitting no.154		
			   seq155[]={4,1,2,3,0,1,1,3},	//sequence of splitting no.155		
			   seq156[]={4,2,2,3,0,1,1,3},	//sequence of splitting no.156		
			   seq157[]={4,3,2,3,0,1,1,3},	//sequence of splitting no.157		
			   seq158[]={2,3,4,0,0,1,1,3},	//sequence of splitting no.158		
			   seq159[]={2,3,4,1,0,1,1,3},	//sequence of splitting no.159		
			   seq160[]={2,3,4,3,0,1,1,3},	//sequence of splitting no.160		
			   seq161[]={2,3,0,1,4,1,1,3},	//sequence of splitting no.161		
			   seq162[]={2,3,0,1,4,3,1,3},	//sequence of splitting no.162		
			   seq163[]={4,0,1,3,0,2,2,3},	//sequence of splitting no.163		
			   seq164[]={4,1,1,3,0,2,2,3},	//sequence of splitting no.164		
			   seq165[]={4,2,1,3,0,2,2,3},	//sequence of splitting no.165		
			   seq166[]={4,3,1,3,0,2,2,3},	//sequence of splitting no.166		
			   seq167[]={1,3,4,0,0,2,2,3},	//sequence of splitting no.167		
			   seq168[]={1,3,4,2,0,2,2,3},	//sequence of splitting no.168		
			   seq169[]={1,3,4,3,0,2,2,3},	//sequence of splitting no.169		
			   seq170[]={1,3,0,2,4,2,2,3},	//sequence of splitting no.170		
			   seq171[]={1,3,0,2,4,3,2,3},	//sequence of splitting no.171		
			   seq172[]={4,0,1,2,0,3,2,3},	//sequence of splitting no.172		
			   seq173[]={4,1,1,2,0,3,2,3},	//sequence of splitting no.173		
			   seq174[]={4,2,1,2,0,3,2,3},	//sequence of splitting no.174		
			   seq175[]={4,3,1,2,0,3,2,3},	//sequence of splitting no.175		
			   seq176[]={1,2,4,0,0,3,2,3},	//sequence of splitting no.176		
			   seq177[]={1,2,4,2,0,3,2,3},	//sequence of splitting no.177		
			   seq178[]={1,2,4,3,0,3,2,3},	//sequence of splitting no.178		
			   seq179[]={1,2,0,3,4,2,2,3},	//sequence of splitting no.179		
			   seq180[]={1,2,0,3,4,3,2,3};	//sequence of splitting no.180		

	/*Set topology parameters from priors*/
	if((P_top.type==0 || P_top.type==1 ||P_top.type==3 || P_top.type==4) && npop < 6){
		if(P_top.type == 0 || P_top.type == 3)
			i = disrand(1,ntop);
		else if(P_top.type == 1 || P_top.type == 4)
			i = P_top.p[0];
		switch(i){
			case 1:   pm->topol = 1;   pm->seq = seq1;   break;
			case 2:   pm->topol = 2;   pm->seq = seq2;   break;
			case 3:   pm->topol = 3;   pm->seq = seq3;   break;
			case 4:	  pm->topol = 4;   pm->seq = seq4;   break;
			case 5:   pm->topol = 5;   pm->seq = seq5;   break;
			case 6:   pm->topol = 6;   pm->seq = seq6;   break;
			case 7:   pm->topol = 7;   pm->seq = seq7;   break;
			case 8:   pm->topol = 8;   pm->seq = seq8;   break;
			case 9:   pm->topol = 9;   pm->seq = seq9;   break;
			case 10:  pm->topol = 10;  pm->seq = seq10;  break;
			case 11:  pm->topol = 11;  pm->seq = seq11;  break;
			case 12:  pm->topol = 12;  pm->seq = seq12;  break;
			case 13:  pm->topol = 13;  pm->seq = seq13;  break;
			case 14:  pm->topol = 14;  pm->seq = seq14;  break;
			case 15:  pm->topol = 15;  pm->seq = seq15;  break;
			case 16:  pm->topol = 16;  pm->seq = seq16;  break;
			case 17:  pm->topol = 17;  pm->seq = seq17;  break;
			case 18:  pm->topol = 18;  pm->seq = seq18;  break;
			case 19:  pm->topol = 19;  pm->seq = seq19;  break;
			case 20:  pm->topol = 20;  pm->seq = seq20;  break;
			case 21:  pm->topol = 21;  pm->seq = seq21;  break;
			case 22:  pm->topol = 22;  pm->seq = seq22;  break;
			case 23:  pm->topol = 23;  pm->seq = seq23;  break;
			case 24:  pm->topol = 24;  pm->seq = seq24;  break;
			case 25:  pm->topol = 25;  pm->seq = seq25;  break;
			case 26:  pm->topol = 26;  pm->seq = seq26;  break;
			case 27:  pm->topol = 27;  pm->seq = seq27;  break;
			case 28:  pm->topol = 28;  pm->seq = seq28;  break;
			case 29:  pm->topol = 29;  pm->seq = seq29;  break;
			case 30:  pm->topol = 30;  pm->seq = seq30;  break;
			case 31:  pm->topol = 31;  pm->seq = seq31;  break;
			case 32:  pm->topol = 32;  pm->seq = seq32;  break;
			case 33:  pm->topol = 33;  pm->seq = seq33;  break;
			case 34:  pm->topol = 34;  pm->seq = seq34;  break;
			case 35:  pm->topol = 35;  pm->seq = seq35;  break;
			case 36:  pm->topol = 36;  pm->seq = seq36;  break;
			case 37:  pm->topol = 37;  pm->seq = seq37;  break;
			case 38:  pm->topol = 38;  pm->seq = seq38;  break;
			case 39:  pm->topol = 39;  pm->seq = seq39;  break;
			case 40:  pm->topol = 40;  pm->seq = seq40;  break;
			case 41:  pm->topol = 41;  pm->seq = seq41;  break;
			case 42:  pm->topol = 42;  pm->seq = seq42;  break;
			case 43:  pm->topol = 43;  pm->seq = seq43;  break;
			case 44:  pm->topol = 44;  pm->seq = seq44;  break;
			case 45:  pm->topol = 45;  pm->seq = seq45;  break;
			case 46:  pm->topol = 46;  pm->seq = seq46;  break;
			case 47:  pm->topol = 47;  pm->seq = seq47;  break;
			case 48:  pm->topol = 48;  pm->seq = seq48;  break;
			case 49:  pm->topol = 49;  pm->seq = seq49;  break;
			case 50:  pm->topol = 50;  pm->seq = seq50;  break;
			case 51:  pm->topol = 51;  pm->seq = seq51;  break;
			case 52:  pm->topol = 52;  pm->seq = seq52;  break;
			case 53:  pm->topol = 53;  pm->seq = seq53;  break;
			case 54:  pm->topol = 54;  pm->seq = seq54;  break;
			case 55:  pm->topol = 55;  pm->seq = seq55;  break;
			case 56:  pm->topol = 56;  pm->seq = seq56;  break;
			case 57:  pm->topol = 57;  pm->seq = seq57;  break;
			case 58:  pm->topol = 58;  pm->seq = seq58;  break;
			case 59:  pm->topol = 59;  pm->seq = seq59;  break;
			case 60:  pm->topol = 60;  pm->seq = seq60;  break;
			case 61:  pm->topol = 61;  pm->seq = seq61;  break;
			case 62:  pm->topol = 62;  pm->seq = seq62;  break;
			case 63:  pm->topol = 63;  pm->seq = seq63;  break;
			case 64:  pm->topol = 64;  pm->seq = seq64;  break;
			case 65:  pm->topol = 65;  pm->seq = seq65;  break;
			case 66:  pm->topol = 66;  pm->seq = seq66;  break;
			case 67:  pm->topol = 67;  pm->seq = seq67;  break;
			case 68:  pm->topol = 68;  pm->seq = seq68;  break;
			case 69:  pm->topol = 69;  pm->seq = seq69;  break;
			case 70:  pm->topol = 70;  pm->seq = seq70;  break;
			case 71:  pm->topol = 71;  pm->seq = seq71;  break;
			case 72:  pm->topol = 72;  pm->seq = seq72;  break;
			case 73:  pm->topol = 73;  pm->seq = seq73;  break;
			case 74:  pm->topol = 74;  pm->seq = seq74;  break;
			case 75:  pm->topol = 75;  pm->seq = seq75;  break;
			case 76:  pm->topol = 76;  pm->seq = seq76;  break;
			case 77:  pm->topol = 77;  pm->seq = seq77;  break;
			case 78:  pm->topol = 78;  pm->seq = seq78;  break;
			case 79:  pm->topol = 79;  pm->seq = seq79;  break;
			case 80:  pm->topol = 80;  pm->seq = seq80;  break;
			case 81:  pm->topol = 81;  pm->seq = seq81;  break;
			case 82:  pm->topol = 82;  pm->seq = seq82;  break;
			case 83:  pm->topol = 83;  pm->seq = seq83;  break;
			case 84:  pm->topol = 84;  pm->seq = seq84;  break;
			case 85:  pm->topol = 85;  pm->seq = seq85;  break;
			case 86:  pm->topol = 86;  pm->seq = seq86;  break;
			case 87:  pm->topol = 87;  pm->seq = seq87;  break;
			case 88:  pm->topol = 88;  pm->seq = seq88;  break;
			case 89:  pm->topol = 89;  pm->seq = seq89;  break;
			case 90:  pm->topol = 90;  pm->seq = seq90;  break;
			case 91:  pm->topol = 91;  pm->seq = seq91;  break;
			case 92:  pm->topol = 92;  pm->seq = seq92;  break;
			case 93:  pm->topol = 93;  pm->seq = seq93;  break;
			case 94:  pm->topol = 94;  pm->seq = seq94;  break;
			case 95:  pm->topol = 95;  pm->seq = seq95;  break;
			case 96:  pm->topol = 96;  pm->seq = seq96;  break;
			case 97:  pm->topol = 97;  pm->seq = seq97;  break;
			case 98:  pm->topol = 98;  pm->seq = seq98;  break;
			case 99:  pm->topol = 99;  pm->seq = seq99;  break;
			case 100: pm->topol = 100; pm->seq = seq100; break;
			case 101: pm->topol = 101; pm->seq = seq101; break;
			case 102: pm->topol = 102; pm->seq = seq102; break;
			case 103: pm->topol = 103; pm->seq = seq103; break;
			case 104: pm->topol = 104; pm->seq = seq104; break;
			case 105: pm->topol = 105; pm->seq = seq105; break;
			case 106: pm->topol = 106; pm->seq = seq106; break;
			case 107: pm->topol = 107; pm->seq = seq107; break;
			case 108: pm->topol = 108; pm->seq = seq108; break;
			case 109: pm->topol = 109; pm->seq = seq109; break;
			case 110: pm->topol = 110; pm->seq = seq110; break;
			case 111: pm->topol = 111; pm->seq = seq111; break;
			case 112: pm->topol = 112; pm->seq = seq112; break;
			case 113: pm->topol = 113; pm->seq = seq113; break;
			case 114: pm->topol = 114; pm->seq = seq114; break;
			case 115: pm->topol = 115; pm->seq = seq115; break;
			case 116: pm->topol = 116; pm->seq = seq116; break;
			case 117: pm->topol = 117; pm->seq = seq117; break;
			case 118: pm->topol = 118; pm->seq = seq118; break;
			case 119: pm->topol = 119; pm->seq = seq119; break;
			case 120: pm->topol = 120; pm->seq = seq120; break;
			case 121: pm->topol = 121; pm->seq = seq121; break;
			case 122: pm->topol = 122; pm->seq = seq122; break;
			case 123: pm->topol = 123; pm->seq = seq123; break;
			case 124: pm->topol = 124; pm->seq = seq124; break;
			case 125: pm->topol = 125; pm->seq = seq125; break;
			case 126: pm->topol = 126; pm->seq = seq126; break;
			case 127: pm->topol = 127; pm->seq = seq127; break;
			case 128: pm->topol = 128; pm->seq = seq128; break;
			case 129: pm->topol = 129; pm->seq = seq129; break;
			case 130: pm->topol = 130; pm->seq = seq130; break;
			case 131: pm->topol = 131; pm->seq = seq131; break;
			case 132: pm->topol = 132; pm->seq = seq132; break;
			case 133: pm->topol = 133; pm->seq = seq133; break;
			case 134: pm->topol = 134; pm->seq = seq134; break;
			case 135: pm->topol = 135; pm->seq = seq135; break;
			case 136: pm->topol = 136; pm->seq = seq136; break;
			case 137: pm->topol = 137; pm->seq = seq137; break;
			case 138: pm->topol = 138; pm->seq = seq138; break;
			case 139: pm->topol = 139; pm->seq = seq139; break;
			case 140: pm->topol = 140; pm->seq = seq140; break;
			case 141: pm->topol = 141; pm->seq = seq141; break;
			case 142: pm->topol = 142; pm->seq = seq142; break;
			case 143: pm->topol = 143; pm->seq = seq143; break;
			case 144: pm->topol = 144; pm->seq = seq144; break;
			case 145: pm->topol = 145; pm->seq = seq145; break;
			case 146: pm->topol = 146; pm->seq = seq146; break;
			case 147: pm->topol = 147; pm->seq = seq147; break;
			case 148: pm->topol = 148; pm->seq = seq148; break;
			case 149: pm->topol = 149; pm->seq = seq149; break;
			case 150: pm->topol = 150; pm->seq = seq150; break;
			case 151: pm->topol = 151; pm->seq = seq151; break;
			case 152: pm->topol = 152; pm->seq = seq152; break;
			case 153: pm->topol = 153; pm->seq = seq153; break;
			case 154: pm->topol = 154; pm->seq = seq154; break;
			case 155: pm->topol = 155; pm->seq = seq155; break;
			case 156: pm->topol = 156; pm->seq = seq156; break;
			case 157: pm->topol = 157; pm->seq = seq157; break;
			case 158: pm->topol = 158; pm->seq = seq158; break;
			case 159: pm->topol = 159; pm->seq = seq159; break;
			case 160: pm->topol = 160; pm->seq = seq160; break;
			case 161: pm->topol = 161; pm->seq = seq161; break;
			case 162: pm->topol = 162; pm->seq = seq162; break;
			case 163: pm->topol = 163; pm->seq = seq163; break;
			case 164: pm->topol = 164; pm->seq = seq164; break;
			case 165: pm->topol = 165; pm->seq = seq165; break;
			case 166: pm->topol = 166; pm->seq = seq166; break;
			case 167: pm->topol = 167; pm->seq = seq167; break;
			case 168: pm->topol = 168; pm->seq = seq168; break;
			case 169: pm->topol = 169; pm->seq = seq169; break;
			case 170: pm->topol = 170; pm->seq = seq170; break;
			case 171: pm->topol = 171; pm->seq = seq171; break;
			case 172: pm->topol = 172; pm->seq = seq172; break;
			case 173: pm->topol = 173; pm->seq = seq173; break;
			case 174: pm->topol = 174; pm->seq = seq174; break;
			case 175: pm->topol = 175; pm->seq = seq175; break;
			case 176: pm->topol = 176; pm->seq = seq176; break;
			case 177: pm->topol = 177; pm->seq = seq177; break;
			case 178: pm->topol = 178; pm->seq = seq178; break;
			case 179: pm->topol = 179; pm->seq = seq179; break;
			case 180: pm->topol = 180; pm->seq = seq180; break;
			default: return 29; //choosing branching sequence
		}
		return 0;
	}
	else if (P_top.type == 2 || P_top.type == 5){
		pm->topol = 0;
		pm->seq = (int*)malloc(2*nevt*sizeof(int));
		for(i=0 ; i<2*nevt ; i++)
			pm->seq[i]=P_top.p[i];
		return 0;
	}
	else
		return 30; //more than 5 pop, top as to be fixed using option 2 or 5
		
}
The diff you're trying to view is too large. Only the first 1000 changed files have been loaded.
Showing with 0 additions and 0 deletions (0 / 0 diffs computed)
swh spinner

Computing file changes ...

back to top

Software Heritage — Copyright (C) 2015–2026, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API