X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=metastats2.c;h=a6424f5fa95086083d4c09658f7c9e2338d2381c;hb=8173238f9f94af9baab8471de58bed7c8830948d;hp=c4d1f46feaff17f90a6e6668126a0f0a1ecd96ac;hpb=2bf3df7736ef2a17286d99394e211f51751d6829;p=mothur.git diff --git a/metastats2.c b/metastats2.c index c4d1f46..a6424f5 100644 --- a/metastats2.c +++ b/metastats2.c @@ -1,167 +1,52 @@ -#include -#include -#include -#include -#include -#include "fisher2.h" -void testp(double *permuted_ttests,int *B,double *permuted,double - *Imatrix,int *nc,int *nr,int *g,double *Tinitial,double *ps); -void permute_matrix(double *Imatrix,int *nc,int *nr,double - *permuted,int *g,double *trial_ts,double *Tinitial,double - *counter); -void permute_array(int *array, int n); -void calc_twosample_ts(double *Pmatrix,int *g,int *nc,int *nr,double - *Ts,double *Tinitial,double *counter1); -void meanvar(double *pmatrix,int *g,int *nr,int *nc,double *storage); -void start(double *Imatrix,int *g,int *nr,int *nc,double *testing, - double storage[][9]); +#include "metastats.h" -int main (int argc, char *argv[]){ - - int col=-1, row=-1, size,g=0,c=0,i=0,j=0,k,counter=0,lines=0, B=10000; - double placeholder=0,min=0, thresh=0.05; - - char arr[10000], str[51], a; - char location[41]="jobj.txt", output[41]="out.txt"; - - for(i=0;i<10000;i++){ - arr[i]='q'; - } - -int u,rflag=0,cflag=0, bflag=0; -char *filename; -int numbers; -double numb; -extern char *optarg; -extern int optind, optopt, opterr; +//The following code has been modified using the original Metastats program from White, J.R., Nagarajan, N. & Pop, M. Statistical methods for detecting differentially abundant features in clinical metagenomic samples. PLoS Comput Biol 5, e1000352 (2009). -while ((u = getopt(argc, argv, ":r:c:g:b:t:f:o:")) != -1) { - switch(u) { - case 'r': - numbers = atoi(optarg); - printf("The number of features/rows is %d.\n", numbers); - row = numbers; - rflag = 1; - break; - case 'c': - numbers = atoi(optarg); - printf("The number of samples/columns is %d.\n", numbers); - col = numbers; - cflag = 1; - break; - case 'g': - numbers = atoi(optarg); - printf("Your g-value is %d.\n", numbers); - g = numbers; - break; - case 'b': - numbers = atoi(optarg); - printf("The number of permutations is %d\n", numbers); - B = numbers; - break; - case 't': - numb = atof(optarg); - printf("Threshold is is %lf\n", numb); - thresh = numb; - break; - case 'f': - filename = optarg; - printf("filename input is %s\n", filename); - strcpy(location,filename); - break; - case 'o': - filename = optarg; - printf("filename output %s\n", filename); - strcpy(output,filename); - break; - case ':': - printf("-%c without filename\n", optopt); - break; - case '?': - printf("unknown arg %c\n", optopt); - break; - } -} - - FILE *jobj, *out; - jobj=fopen(location,"r"); +int metastat_main (char* outputFileName, int numRows, int numCols, double threshold, int numPermutations, double** data, int secondGroupingStart){ - if(jobj == NULL){ - printf("Please don't forget to save your matrix in the active"); - printf(" directory as \"%s\".\n",location); - return 0; - } - - // Gets the first line of samples names and checks for user error. - fgets(arr,10000,jobj); - - for(i=0;i<10000;i++){ - if(isspace(arr[i])){ - counter++; } - } - - if (cflag == 0) { - printf("You didn't tell us how many subjects there are!\n"); - printf("But we'll still do the analysis as if there are %d subjects.\n\n",col=counter-1); - } - if (cflag == 1) { - if (col != counter-1){ - printf("We would expect %d subjects, but you said %d.\n",counter-1,col); - } - } + int size,c=0,i=0,j=0,k,counter=0, bflag=0; + int B=numPermutations; + int row = numRows; + int col = numCols; + int g = secondGroupingStart; + double thresh=threshold; + double placeholder=0,min=0; - while((a = fgetc(jobj)) != EOF){ - if(a == '\n'){ - lines++; } - } + char output[1024]; + strcpy(output, outputFileName); + FILE *out; - if (rflag == 0) { - printf("You didn't specify the number of features!\n"); - printf("But we'll still do the analysis assuming %d features.\n\n", row=lines-1); - } - if (rflag == 1) { - if ( lines-1 != row ){ - printf("We would expect %d features, but you said %d.\n",lines-1,row); - } - } - if (g>=col || g<=0){ printf("Check your g value\n"); } // Initialize the matrices - size = row*col; - double matrix[row][col]; - double pmatrix[size],pmatrix2[size],permuted[size]; - double storage[row][9]; - - for (i=0;i.999999999){ @@ -318,11 +214,14 @@ while ((u = getopt(argc, argv, ":r:c:g:b:t:f:o:")) != -1) { } } else{ - +printf("here before testp\n"); testp(permuted_ttests, permutes, permuted,pmatrix, nc, nr, gvalue,tinitial,pvalues); // Checks to make sure the matrix isn't sparse. - double sparse[row], sparse2[row]; + double * sparse, * sparse2; + sparse = (double *) malloc(size*sizeof(double *)); + sparse2 = (double *) malloc(size*sizeof(double *)); + for(i=0;i.999999999){ @@ -391,8 +290,12 @@ while ((u = getopt(argc, argv, ":r:c:g:b:t:f:o:")) != -1) { } // Calculates the mean of counts (not normalized) - double temp[row][2]; - + double ** temp; + temp = malloc(row*sizeof(double *)); + for (i = 0; i