int bammer_main(args *pars){ gf=(getFasta *) allMethods[1]; func = pars->callback; std::vector<char *> nams; //read bamfiles if(pars->inputfiles) nams = angsd::getFilenames(pars->inputfiles,pars->nInd); else nams.push_back(strdup(pars->inputfile));//if only one file just push bamfile bufReader *rd = initializeBufReaders2(nams); //read regions std::vector<char *> regionsRaw; if(pars->regionfile) regionsRaw = getRegions(pars->regionfile); else if(pars->region!=NULL){ regionsRaw.push_back(strdup(pars->region));//if only one file just push bamfile } std::vector<regs> regions; for(size_t i=0;i<regionsRaw.size();i++){ regs tmpRegs; if(parse_region(regionsRaw[i],*rd[0].hd,tmpRegs.refID,tmpRegs.start,tmpRegs.stop)<0||tmpRegs.stop<tmpRegs.start){ fprintf(stderr,"[%s] problems with indexing: %s\n",__FUNCTION__,regionsRaw[i]); exit(0); }else regions.push_back(tmpRegs); } //printReg(stderr,regions) //each filereader contains a filename for a bam, if we try to read remote files, then we need to download the bai file, and update the filename if(regions.size()!=0) modNames(rd,nams.size()); extern int maxThreads; if(pars->jobtype==2) uppile(pars->show,maxThreads,rd,pars->nLines,nams.size(),regions); else if(pars->jobtype==1) while(motherView(rd,nams.size(),regions)); else{ fprintf(stderr,"nothing to do? what should program do?\n"); } //cleanup stuff for(int i=0;i<(int)nams.size();i++){ free(nams[i]); dalloc_bufReader(rd[i]); } for(size_t i=0;i<regions.size();i++) free(regionsRaw[i]); delete [] rd; free(pars->inputfiles);free(pars->inputfile);free(pars->region); delete pars; return 0; }
int bammer_main(argStruct *args){ gf=(abcGetFasta *) allMethods[1]; //read bamfiles extern int checkBamHeaders; bufReader *rd = initializeBufReaders2(args->nams,checkBamHeaders); extern int maxThreads; uppile(args->show,maxThreads,rd,args->nLines,args->nams.size(),args->regions,gf); //cleanup stuff for(unsigned i=0;i<args->nams.size();i++) dalloc_bufReader(rd[i]); delete [] rd; return 0; }