Пример #1
0
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");
  }
}
Пример #2
0
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;

}
Пример #3
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);
    }
 
  }

}
Пример #4
0
//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);
}
Пример #5
0
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;

}