multiReader::multiReader(int argc,char**argv){ gz=Z_NULL; myglf=NULL;myvcf=NULL;mpil=NULL;bglObj=NULL; nLines=50; fname=NULL; intName=1; minQ = MINQ; nInd =0; isSim =0; args=NULL; args = setArgStruct(argc,argv); fprintf(args->argumentFile,"\t-> Command: \n"); for(int i=0;i<argc;i++) fprintf(args->argumentFile,"%s ",argv[i]); // fprintf(args->argumentFile,"\n\n"); if(args->argumentFile!=stderr) fprintf(args->argumentFile,"\n\t-> angsd version: %s (htslib: %s) build(%s %s)\n",ANGSD_VERSION,hts_version(),__DATE__,__TIME__); void printTime(FILE *fp); printTime(args->argumentFile); //type = args->inputtype; if(args->argc==2) { if((!strcasecmp(args->argv[1],"-beagle")) || (!strcasecmp(args->argv[1],"-glf")) || (!strcasecmp(args->argv[1],"-glf3")) || (!strcasecmp(args->argv[1],"-pileup")) || (!strcasecmp(args->argv[1],"-vcf-GL")) || (!strcasecmp(args->argv[1],"-vcf-pl")) || (!strcasecmp(args->argv[1],"-glf10_text")) || (!strcasecmp(args->argv[1],"-vcf-GP"))) { printArg(stdout,args); exit(0); }else if ((!strcasecmp(args->argv[1],"-bam")) || (!strcasecmp(args->argv[1],"-b"))){ setArgsBam(args); exit(0); }else return; } getOptions(args); if(args->fai==NULL){ int printAndExit =0; switch(args->inputtype) { case INPUT_GLF: printAndExit=1; break; case INPUT_GLF10_TEXT: printAndExit=1; break; case INPUT_GLF3: printAndExit=1; break; case INPUT_BEAGLE: printAndExit=1; break; case INPUT_PILEUP: printAndExit=1; break; } if(printAndExit){ fprintf(stderr,"\t-> Must supply -fai file\n"); exit(0); } } if(args->fai){ if(!(args->hd=getHeadFromFai(args->fai))) exit(0); }else{ if(args->nams.size()==0){ fprintf(stderr,"\t-> Must choose inputfile -bam/-glf/-glf3/-pileup/-i/-vcf-gl/-vcf-gp/-vcf-pl/-glf10_text filename\n"); exit(0); } if(args->inputtype==INPUT_BAM){ htsFile *in=sam_open(args->nams[0],"r"); assert(in); args->hd= sam_hdr_read(in); hts_close(in); } } if(!(INPUT_VCF_GL||INPUT_VCF_GP)){ if(args->hd==NULL){ fprintf(stderr,"For non-bams you should include -fai arguments\n"); exit(0); } } if((args->inputtype==INPUT_PILEUP||args->inputtype==INPUT_GLF||args->inputtype==INPUT_GLF3||args->inputtype==INPUT_GLF10_TEXT)){ if(nInd==0){ fprintf(stderr,"\t-> Must supply -nInd when using -glf/-glf3/-pileup/-glf10_text files\n"); exit(0); } }else args->nInd = args->nams.size(); if(args->inputtype==INPUT_VCF_GP||args->inputtype==INPUT_VCF_GL){ if(args->regions.size()>1){ fprintf(stderr,"\t-> Only one region can be specified with using bcf (i doubt more is needed) will exit\n"); exit(0); }else if(args->regions.size()<=1){ myvcf = new vcfReader(args->infile,NULL); args->hd=bcf_hdr_2_bam_hdr_t(myvcf->hs); args->nInd = myvcf->hs->nsamples; } } //make args->hd revMap = buildRevTable(args->hd); args->revMap = revMap; setArgsBam(args); if(args->inputtype==INPUT_VCF_GL){ if(args->regions.size()==1){ char tmp[1024]; int start=args->regions[0].start; int stop=args->regions[0].stop; int ref=args->regions[0].refID; snprintf(tmp,1024,"%s:%d-%d",args->hd->target_name[ref],start+1,stop); // fprintf(stderr,"tmp:%s\n",tmp); // exit(0); myvcf->seek(tmp); } } if(fname==NULL) return; gz=Z_NULL; gz=gzopen(fname,"r"); if(gz==Z_NULL){ fprintf(stderr,"\t-> Problem opening file: \'%s\'\n",fname); exit(0); } switch(args->inputtype){ case INPUT_PILEUP:{ mpil = new mpileup(args->nInd,gz,args->revMap,minQ); break; } case INPUT_GLF:{ myglf = new glfReader(args->nInd,gz,10,isSim); break; } case INPUT_GLF3:{ isSim = 1; //Added by FGV on 22/02/2015: GLF3 is always simulated data until a better alternative can be found myglf = new glfReader(args->nInd,gz,3,isSim); break; } case INPUT_GLF10_TEXT:{ myglf_text = new glfReader_text(args->nInd,gz,args->revMap); break; } case INPUT_BEAGLE:{ bglObj = new beagle_reader(gz,args->revMap,intName,args->nInd); break; } default:{ break; } } if(args->inputtype==INPUT_VCF_GL||args->inputtype==INPUT_VCF_GL){ fprintf(stderr,"\t-> VCF still beta. Remember that\n"); fprintf(stderr,"\t 1. indels are are discarded\n"); fprintf(stderr,"\t 2. will use chrom, pos PL columns\n"); fprintf(stderr,"\t 3. GL tags are interpreted as log10 and are scaled to ln (NOT USED)\n"); fprintf(stderr,"\t 4. GP tags are interpreted directly as unscaled post probs (spec says phredscaled...) (NOT USED)\n"); fprintf(stderr,"\t 5. FILTER column is currently NOT used (not sure what concensus is)\n"); fprintf(stderr,"\t 6. -sites does NOT work with vcf input but -r does\n"); fprintf(stderr,"\t 7. vcffilereading is still BETA, please report strange behaviour\n"); } }
multiReader::multiReader(int argc,char**argv){ fai = NULL; bytesPerLine = 33554432 ;//2^15 about 33 megs perline/persites should be enough nLines=50; fname=NULL; intName=1; minQ = MINQ; nInd =0; nInd2=-1; from =to=-1; isSim =0; args=NULL; args = setArgStruct(argc,argv); fprintf(args->argumentFile,"\t-> Command: \n"); for(int i=0;i<argc;i++) fprintf(args->argumentFile,"%s ",argv[i]); // fprintf(args->argumentFile,"\n\n"); extern double VERS; fprintf(args->argumentFile,"\n\t-> angsd version: %.3f\t build(%s %s)\n",VERS,__DATE__,__TIME__); void printTime(FILE *fp); printTime(args->argumentFile); type = args->inputtype; if(args->argc==2){ if((!strcasecmp(args->argv[1],"-beagle"))||!strcasecmp(args->argv[1],"-glf")||(!strcasecmp(args->argv[1],"-pileup"))){ printArg(stdout); exit(0); }else if ((!strcasecmp(args->argv[1],"-bam"))|| (!strcasecmp(args->argv[1],"-b"))){ setArgsBam(args); exit(0); }else return; } getOptions(args); if(fai){ hd=getHeadFromFai(fai); }else{ if(args->nams.size()==0){ fprintf(stderr,"\t-> Must choose inputfile -bam/-glf/-pileup/-i filename\n"); exit(0); } hd= getHd_andClose(args->nams[0]); } args->hd = hd; if(args->hd==NULL){ fprintf(stderr,"For non-bams you should include -fai arguments\n"); exit(0); } if((type==INPUT_PILEUP||type==INPUT_GLF)){ if(nInd==0){ fprintf(stderr,"\t-> Must supply -nInd when using raw GLF files\n"); exit(0); } }else args->nInd = args->nams.size(); revMap = buildRevTable(args->hd); args->revMap = revMap; setArgsBam(args); if(fname==NULL) return; gz=gzopen(fname,"r"); switch(type){ case INPUT_PILEUP:{ mpil = new mpileup(args->nInd,gz,bytesPerLine,args->revMap,minQ); break; } case INPUT_GLF:{ myglf = new glfReader(args->nInd,nInd2,from,to,gz,isSim); break; } case INPUT_BEAGLE:{ bglObj = new beagle_reader(bytesPerLine,gz,args->revMap,intName,args->nInd); break; } default:{ // fprintf(stderr,"\t[%s] assuming what ?\n",__FUNCTION__); //pl = new pileups (faifile,lStart,lStop,filenames,type); break; } } }