hwe::hwe(const char *outfiles,argStruct *arguments,int inputtype){ doHWE=0; if(arguments->argc==2){ if(!strcmp(arguments->argv[1],"-doHWE")){ printArg(stdout); exit(0); }else return; } getOptions(arguments); printArg(arguments->argumentFile); if(doHWE==0) return; //make output files const char* postfix; postfix=".hwe.gz"; if(doHWE>0){ outfileZ = openFileGz(outfiles,postfix,GZOPT); //print header gzprintf(outfileZ,"Chromo\tPosition\tMajor\tMinor\tFreq\thweFreq\tF\tLRT\n"); } }
abbababa::abbababa(const char *outfiles,argStruct *arguments,int inputtype){ doAbbababa=0; minQ=MINQ;//<-general.h sample=1; currentChr=-1; if(arguments->argc==2){ if(!strcmp(arguments->argv[1],"-doAbbababa")){ printArg(stdout); exit(0); }else return; } getOptions(arguments); printArg(arguments->argumentFile); if(doAbbababa==0) return; //make output files const char* postfix; postfix=".abbababa.gz"; outfileZ = openFileGz(outfiles,postfix,GZOPT); const char* postfix2; postfix2=".abbababa2"; outfile = openFile(outfiles,postfix2); //allocate allele counts alleleCounts = new size_t *[nInd]; for(int i=0;i<nInd;i++) alleleCounts[i] = new size_t [256]; for(int i=0;i<nInd;i++) for(int j=0;j<256;j++) alleleCounts[i][j]=0; alleleCountsChr = new size_t *[nInd]; for(int i=0;i<nInd;i++) alleleCountsChr[i] = new size_t [256]; for(int i=0;i<nInd;i++) for(int j=0;j<256;j++) alleleCountsChr[i][j]=0; }
likeClass::likeClass(const char *outfiles,argStruct *arguments,int inputtype){ postfix = ".glf.gz"; beaglepostfix = ".beagle.gz"; trim =0; GL=0; doGlf=0; errorFname = NULL; errorProbs = NULL; GL=0; minQ = MINQ;//<- general.h minInd=0; angsd_tmpdir = strdup("angsd_tmpdir"); if(arguments->argc==2){ if(!strcmp(arguments->argv[1],"-GL")){ printArg(stdout); exit(0); }else return; } getOptions(arguments); printArg(arguments->argumentFile); // if(GL==0) // return; if(GL==1) bam_likes_init(); else if(GL==2) gatk_init(); else if(GL==3){ soap.init(arguments->nInd,angsd_tmpdir); if(soap.doRecal) fprintf(stderr,"[%s] Will calculate recalibration matrices, please don't do any other analysis\n",__FILE__); else fprintf(stderr,"[%s] Will use precalculated calibration matrices\n",__FILE__); }else if(GL==4) { //default errormatrix double errorsDefault[4][4]={{0 ,0.00031 , 0.00373 , 0.000664}, {0.000737, 0 , 0.000576, 0.001702}, {0.001825,0.000386, 0 , 0.000653}, {0.00066 ,0.003648, 0.000321, 0 }, }; //allocate and plug in default values errors = new double *[4]; for(int i=0;i<4;i++){ errors[i] = new double[4]; for(int j=0;j<4;j++) errors[i][j] = errorsDefault[i][j]; } if(errorFname!=NULL) readError(errors,errorFname); errorProbs = error::generateErrorPointers(errors,3,4); } gzoutfile = Z_NULL; bufstr.s=NULL; bufstr.l=bufstr.m=0;// <- used for buffered output bufstr.l=0; if(doGlf){ if(doGlf!=2) gzoutfile = openFileGz(outfiles,postfix,GZOPT); else{ gzoutfile = openFileGz(outfiles,beaglepostfix,GZOPT); kputs("marker\tallele1\tallele2",&bufstr); for(int i=0;i<arguments->nInd;i++){ kputs("\tInd",&bufstr); kputw(i,&bufstr); kputs("\tInd",&bufstr); kputw(i,&bufstr); kputs("\tInd",&bufstr); kputw(i,&bufstr); } kputc('\n',&bufstr); gzwrite(gzoutfile,bufstr.s,bufstr.l); } } }
//constructor frequency::frequency(const char *outfiles,argStruct *arguments,int inputtype){ inputIsBeagle =0; filtLrt=filtMaf =0; minMaf =0.01; minLRT =24; nInd = arguments->nInd; eps = 0.001; doZ =0; outfile = Z_NULL; doMaf=0; GL=0; doSNP=0; doPost=0; emIter=100; doMajorMinor=0; refName = NULL; ancName = NULL; EM_START = 0.001; if(arguments->argc==2){ if(!strcmp(arguments->argv[1],"-doMaf")){ printArg(stdout); exit(0); }else return; } getOptions(arguments); printArg(arguments->argumentFile); if(doMaf==0) return; //make output files const char* postfix; if(doZ==1){ postfix=".mafs.gz"; outfileZ = openFileGz(outfiles,postfix,"w6h"); }else{ postfix=".mafs"; outfile = openFile(outfiles,postfix); } //print header kstring_t bufstr; bufstr.s=NULL;bufstr.l=bufstr.m=0; kputs("chromo\tposition\tmajor\tminor\t",&bufstr); if(refName!=NULL||inputtype==3)// inputtyp=3 is tglf, if tglf then -posi has been supplied kputs("ref\t",&bufstr); if(ancName||inputtype==3||inputtype==4)// inputtyp=3 is tglf, if tglf then -posi has been supplied kputs("anc\t",&bufstr); if(doMaf &1) kputs("knownBFGS\t",&bufstr); if(doMaf &2) kputs("knownEM\t",&bufstr); if(doMaf &4) kputs("unknownBFGS\t",&bufstr); if(doMaf &8) kputs("unknownEM\t",&bufstr); if(doMaf &16) kputs("PPmaf\t",&bufstr); if(doMaf &32) kputs("phat\t",&bufstr); if(doSNP){ if(doMaf &1) kputs("pK-BFGS\t",&bufstr); if(doMaf &2) kputs("pK-EM\t",&bufstr); if(doMaf &4) kputs("pU-BFGS\t",&bufstr); if(doMaf &8) kputs("pu-EM\t",&bufstr); } kputs("nInd\n",&bufstr); if(doZ==1) gzwrite(outfileZ,bufstr.s,bufstr.l); else fprintf(outfile,"%s",bufstr.s); free(bufstr.s); }
int main(int argc, char **argv){ fprintf(stderr,"NGSrelate buildtime: (%s:%s)\n",__DATE__,__TIME__); if(argc==1){// if no arguments, print info on program info(); return 0; } //below for catching ctrl+c, and dumping files struct sigaction sa; sigemptyset (&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = handler; sigaction(SIGPIPE, &sa, 0); sigaction(SIGINT, &sa, 0); //initial values char *bfile = NULL; char *binfile = NULL; char *outfiles = NULL; double a,k0,k1,k2; a=k0=k1=-1; k2=0; int calcA = 1; //filter opts double minMaf = 0.01; char *freqfile =NULL; // reading arguments argv++; while(*argv){ if(strcmp(*argv,"-beagle")==0 ) bfile=*++argv; else if(strcmp(*argv,"-bin")==0 ) binfile=*++argv; else if(strcmp(*argv,"-freqfile")==0 ) freqfile=*++argv; else if(strcmp(*argv,"-outnames")==0 ) outfiles=*++argv; else if(strcmp(*argv,"-minMaf")==0 ) minMaf = atoi(*++argv); else if(strcmp(*argv,"-a")==0 ) a = atof(*++argv); else if(strcmp(*argv,"-k0")==0 ) k0 = atof(*++argv); else if(strcmp(*argv,"-k1")==0 ) k1 = atof(*++argv); else if(strcmp(*argv,"-k2")==0 ) k2 = atof(*++argv); else if(strcmp(*argv,"-calcA")==0 ) calcA = atoi(*++argv); else{ fprintf(stderr,"Unknown arg:%s\n",*argv); info(); return 0; } ++argv; } if(bfile==NULL&&binfile==NULL){ fprintf(stderr,"Please supply input data file: -beagle OR -bin"); info(); }else if(bfile!=NULL&&binfile!=NULL){ fprintf(stderr,"Please supply input data file: -beagle OR -bin"); info(); } if(outfiles==NULL){ if(bfile!=NULL) outfiles=bfile; else outfiles = binfile; fprintf(stderr,"Will use: %s as prefix for output\n",outfiles); } FILE *flog=openFile(outfiles,".log"); clock_t t=clock();//how long time does the run take time_t t2=time(NULL); std::vector<perChr> pd; if(bfile!=NULL){ bgl d=readBeagle(bfile); fprintf(stderr,"Input beaglefile has dim: nsites=%d nind=%d\n",d.nSites,d.nInd); pd = makeDat(d); gzFile dfile = openFileGz(outfiles,".bin.gz","wb"); for(uint i=0;i<pd.size();i++) marshall_dump(dfile,pd[i]); gzclose(dfile); }else{ gzFile dfile = getGz(binfile,"rb"); pd = marshall_read(dfile); gzclose(dfile); } //calculate frequencies for(uint i=0;i<pd.size();i++) setFreq(pd[i]); // printStuff(pd); //set seed srand(seed); //below is the main looping trhought the iterations. FILE *fp =openFile(outfiles,".freq"); for(int i=0;i<pd[0].nSites;i++) fprintf(fp,"%f ",exp(pd[0].freq[i])); fclose(fp); double *freq = NULL; if(freqfile!=NULL){ freq = readDouble(freqfile,pd[0].nSites); fprintf(stderr,"freq=%f\n",freq[0]); } para p; p.pair[0] = 0;p.pair[1] = 1; p.a=a;p.k0=k0;p.k1=k1;p.k2=k2; fprintf(stderr,"pa=%f pk0=%f\n",p.a,p.k0); hmm res = analysis(pd[0],freq,p,calcA); gzFile bo = openFileGz(outfiles,".bres.gz","wb"); fdump(bo,res,pd[0].name); //deallocate memory for(int i=0;1&&i<dumpedFiles.size();i++){ fprintf(stderr,"dumpedfiles are: %s\n",dumpedFiles[i]); free(dumpedFiles[i]); } fprintf(stderr, "\t[ALL done] cpu-time used = %.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC); fprintf(stderr, "\t[ALL done] walltime used = %.2f sec\n", (float)(time(NULL) - t2)); // print to log file fprintf(flog, "\t[ALL done] cpu-time used = %.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC); fprintf(flog, "\t[ALL done] walltime used = %.2f sec\n", (float)(time(NULL) - t2)); fclose(flog); gzclose(bo); return 0; }