Modifs script C

master
tforest 2021-11-18 11:14:50 +01:00
parent 86f84a676d
commit 91915e5fa8
1 changed files with 63 additions and 2 deletions

View File

@ -19,8 +19,42 @@ void slice_str(const char * str, char * buffer, size_t start, size_t end)
buffer[j] = 0; buffer[j] = 0;
} }
int min(int * array, int size){
//Consider first element as smallest
int smallest = array[0];
int i;
for (i = 0; i < num; i++) {
if (a[i] < smallest) {
smallest = a[i];
}
}
}
int countDistinct(int a[], int n) //Function Definition
{
int i, j, count = 0;
//Traverse the array
for (i = 1; i < n; i++) //hold an array element
{
for (j = 0; j < i; j++)
{
if (a[i] == a[j]) //Check for duplicate elements
{
break; //If duplicate elements found then break
}
}
if (i == j)
{
count++; //increment the number of distinct elements
}
}
return count; //Return the number of distinct elements
}
# define LL 8192 /* line length maximum */ # define LL 8192 /* line length maximum */
# define DIPLOID true
# define FOLDED true
# define IGNORED_FIELDS 9
int main ( int argc, char *argv[] ){ int main ( int argc, char *argv[] ){
if ( argc < 3) { if ( argc < 3) {
@ -29,9 +63,20 @@ int main ( int argc, char *argv[] ){
} }
gzFile fp; gzFile fp;
char line[LL]; char line[LL];
int N;
char delim[] = "\t"; char delim[] = "\t";
fp = gzopen( argv[1], "r" ); fp = gzopen( argv[1], "r" );
// pop of size 2N when diploid
if (DIPLOID == true && FOLDED == false) {
N = 2 * atoi(argv[2]);
} else {
N = atoi(argv[2]);
}
int snp_genotypes[N];
int SFS_values[N];
gzgets( fp, line, LL ); gzgets( fp, line, LL );
while ( ! gzeof( fp ) ){ while ( ! gzeof( fp ) ){
int k = 0; int k = 0;
@ -43,14 +88,30 @@ int main ( int argc, char *argv[] ){
char *vcf_field = strtok(line, delim); char *vcf_field = strtok(line, delim);
while(vcf_field != NULL){ while(vcf_field != NULL){
k++; k++;
if (k > 9) { if (k > IGNORED_FIELDS) {
const size_t len = strlen(vcf_field); const size_t len = strlen(vcf_field);
char buffer[len + 1]; char buffer[len + 1];
//printf("'%s'\n", ptr); //printf("'%s'\n", ptr);
slice_str(vcf_field, buffer, 0, 0); slice_str(vcf_field, buffer, 0, 0);
printf("%s ", buffer); //printf("%d %s ", N, buffer);
snp_genotypes[k-IGNORED_FIELDS] = atoi(buffer);
//printf("%d ", smpl_genotype[k-9]);
} }
vcf_field = strtok(NULL, delim); vcf_field = strtok(NULL, delim);
int c= countDistinct(snp_genotypes, N);
// skip if all individuals have the same genotype
if (c == 1) {
continue;
gzgets( fp, line, LL );
}
/* int i; */
/* for (i = 1; i < N; ++i) */
/* { */
/* printf("%d ", snp_genotypes[i]); */
/* } */
int allele_counts[c];
min(allele_counts, N);
} }
// printf("%s", line ); // printf("%s", line );
// loads the next line // loads the next line