Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}