Full documentation can be found at (graphv section):\n\ http://oss.oetiker.ch/rrdtool/doc/rrdgraph.en.html"; static PyObject * _rrdtool_graphv(PyObject *Py_UNUSED(self), PyObject *args) { PyObject *ret; rrd_info_t *data; if (convert_args("graphv", args) == -1) return NULL; Py_BEGIN_ALLOW_THREADS data = rrd_graph_v(rrdtool_argc, rrdtool_argv); Py_END_ALLOW_THREADS if (data == NULL) { PyErr_SetString(rrdtool_OperationalError, rrd_get_error()); rrd_clear_error(); ret = NULL; } else { ret = _rrdtool_util_info2dict(data); rrd_info_free(data); } destroy_args(); return ret; }
static PyObject * _rrdtool_updatev(PyObject *Py_UNUSED(self), PyObject *args) { PyObject *ret; rrd_info_t *data; if (convert_args("updatev", args) == -1) return NULL; Py_BEGIN_ALLOW_THREADS data = rrd_update_v(rrdtool_argc, rrdtool_argv); Py_END_ALLOW_THREADS if (data == NULL) { PyErr_SetString(rrdtool_OperationalError, rrd_get_error()); rrd_clear_error(); ret = NULL; } else { ret = _rrdtool_util_info2dict(data); rrd_info_free(data); } destroy_args(); return ret; }
void print(int argc,char **argv){ if(argc<1){ fprintf(stderr,"\t-> Must supply afile.saf.idx files \n"); fprintf(stderr,"\t-> Examples \n"); fprintf(stderr,"\t-> ./ngsPSMC print pop1.saf.idx \n"); fprintf(stderr,"\t-> ./ngsPSMC print pop1.saf.idx -r chr1:10000000-12000000\n"); return; } args *pars = getArgs(argc,argv); writepsmc_header(stderr,pars->perc); for(myMap::iterator it=pars->perc->mm.begin();it!=pars->perc->mm.end();++it){ if(pars->chooseChr!=NULL) it = iter_init(pars->perc,pars->chooseChr,pars->start,pars->stop); else it = iter_init(pars->perc,it->first,pars->start,pars->stop); for(size_t s=pars->perc->first;s<pars->perc->last;s++) fprintf(stdout,"%s\t%d\t%e\t%e\n",it->first,pars->perc->pos[s]+1,pars->perc->gls[2*s],pars->perc->gls[2*s+1]); if(pars->chooseChr!=NULL) break; } destroy_args(pars); }
void print(int argc,char **argv){ if(argc<1){ fprintf(stderr,"\t-> Must supply afile.saf.idx files \n"); fprintf(stderr,"\t-> Examples \n"); fprintf(stderr,"\t-> ./realSFS print pop1.saf.idx \n"); fprintf(stderr,"\t-> ./realSFS print pop1.saf.idx -r chr1:10000000-12000000\n"); fprintf(stderr,"\t-> ./realSFS print pop1.saf.idx pop2.saf.idx -r chr2:10000000-12000000\n"); fprintf(stderr,"\t-> You can generate the oldformat by appending the -oldout 1 to the print command like\n"); fprintf(stderr,"\t-> ./realSFS print pop1.saf.idx pop2.saf.idx -oldout 1\n"); return; } args *pars = getArgs(argc,argv); for(int i=0;i<pars->saf.size();i++) pars->saf[0]->kind = 2; if(1||pars->saf.size()!=1){ fprintf(stderr,"\t-> Will jump to multisaf printer and will only print intersecting sites between populations\n"); printMulti<T>(pars); return; } writesaf_header(stderr,pars->saf[0]); float *flt = new float[pars->saf[0]->nChr+1]; for(myMap::iterator it=pars->saf[0]->mm.begin();it!=pars->saf[0]->mm.end();++it){ if(pars->chooseChr!=NULL) it = iter_init(pars->saf[0],pars->chooseChr,pars->start,pars->stop); else it = iter_init(pars->saf[0],it->first,pars->start,pars->stop); size_t ret; int pos; while((ret=iter_read(pars->saf[0],flt,sizeof(float)*(pars->saf[0]->nChr+1),&pos))){ fprintf(stdout,"%s\t%d",it->first,pos+1); for(int is=0;is<pars->saf[0]->nChr+1;is++) fprintf(stdout,"\t%f",flt[is]); fprintf(stdout,"\n"); } if(pars->chooseChr!=NULL) break; } delete [] flt; destroy_args(pars); }
int print_header(int argc,char **argv){ if(argc<1){ fprintf(stderr,"Must supply afile.saf.idx \n"); return 0; } args *pars = getArgs(argc,argv); if(!pars) return 1; writepsmc_header(stdout,pars->perc); destroy_args(pars); return 0; }
static PyObject *PyRRD_graph( PyObject UNUSED(*self), PyObject * args) { PyObject *r; char **argv, **calcpr; int argc, xsize, ysize, i; double ymin, ymax; if (create_args("graph", args, &argc, &argv) < 0) return NULL; if (rrd_graph(argc, argv, &calcpr, &xsize, &ysize, NULL, &ymin, &ymax) == -1) { PyErr_SetString(ErrorObject, rrd_get_error()); rrd_clear_error(); r = NULL; } else { r = PyTuple_New(3); PyTuple_SET_ITEM(r, 0, PyInt_FromLong((long) xsize)); PyTuple_SET_ITEM(r, 1, PyInt_FromLong((long) ysize)); if (calcpr) { PyObject *e, *t; e = PyList_New(0); PyTuple_SET_ITEM(r, 2, e); for (i = 0; calcpr[i]; i++) { t = PyString_FromString(calcpr[i]); PyList_Append(e, t); Py_DECREF(t); rrd_freemem(calcpr[i]); } rrd_freemem(calcpr); } else { Py_INCREF(Py_None); PyTuple_SET_ITEM(r, 2, Py_None); } } destroy_args(&argv); return r; }
int main( int argc, char *argv[] ) { Huint i; argument *arg; hthread_t tid[WORKERS + DISPATCHERS]; arg = create_args(); for(i = 0;i<WORKERS;i++) tid[i] = create_worker( arg ); for(i = 0;i<DISPATCHERS;i++) tid[i+WORKERS] = create_dispatcher( arg ); for(i = 0;i<WORKERS;i++) hthread_join(tid[i], NULL); for(i = 0;i<DISPATCHERS;i++) hthread_join(tid[i+WORKERS], NULL); destroy_args( arg ); printf( "--QED--\n" ); return 1; }
int print_header(int argc,char **argv){ if(argc<1){ fprintf(stderr,"Must supply afile.saf.idx \n"); return 0; } args *pars = getArgs(argc,argv); if(!pars) return 1; if(pars->saf.size()!=1){ fprintf(stderr,"print_header only implemeted for single safs\n"); exit(0); } writesaf_header(stdout,pars->saf[0]); destroy_args(pars); return 0; }
static PyObject * PyRRD_last(PyObject UNUSED(*self), PyObject *args) { PyObject *r; int argc, ts; char **argv; if (create_args("last", args, &argc, &argv) < 0) return NULL; if ((ts = rrd_last(argc, argv)) == -1) { PyErr_SetString(ErrorObject, rrd_get_error()); rrd_clear_error(); r = NULL; } else r = PyInt_FromLong((long)ts); destroy_args(&argv); return r; }
static PyObject *PyRRD_flushcached(PyObject UNUSED(*self), PyObject * args) { PyObject *r; int argc; char **argv; if (create_args("flushcached", args, &argc, &argv) < 0) return NULL; if (rrd_flushcached(argc, argv) != 0) { PyErr_SetString(ErrorObject, rrd_get_error()); rrd_clear_error(); r = NULL; } else { Py_INCREF(Py_None); r = Py_None; } destroy_args(&argv); return r; }
static PyObject * PyRRD_resize(PyObject UNUSED(*self), PyObject *args) { PyObject *r; char **argv; int argc, ts; if (create_args("resize", args, &argc, &argv) < 0) return NULL; if ((ts = rrd_resize(argc, argv)) == -1) { PyErr_SetString(ErrorObject, rrd_get_error()); rrd_clear_error(); r = NULL; } else { Py_INCREF(Py_None); r = Py_None; } destroy_args(&argv); return r; }
static PyObject *PyRRD_updatev(PyObject UNUSED(*self), PyObject * args) { PyObject *r; int argc; char **argv; rrd_info_t *data; if (create_args("updatev", args, &argc, &argv) < 0) return NULL; if ((data = rrd_update_v(argc, argv)) == NULL) { PyErr_SetString(ErrorObject, rrd_get_error()); rrd_clear_error(); r = NULL; } else { r = PyDict_FromInfo(data); rrd_info_free(data); } destroy_args(&argv); return r; }
int fst_index(int argc,char **argv){ if(argc<1){ fprintf(stderr,"Must supply afile.saf.idx [chrname, write more info]\n"); return 0; } args *arg = getArgs(argc,argv); if(!arg->fstout){ fprintf(stderr,"\t-> Must supply -fstout for doing fstindex\n"); return 0; } std::vector<persaf *> &saf =arg->saf; //assert(saf.size()==2); size_t nSites = arg->nSites; if(nSites == 0){//if no -nSites is specified nSites = 100000;//<- set default to 100k sites, no need to load everything... // nSites=nsites(saf,arg); } fprintf(stderr,"\t-> nSites: %lu\n",nSites); std::vector<Matrix<float> *> gls; for(int i=0;i<saf.size();i++) gls.push_back(alloc<float>(nSites,saf[i]->nChr+1)); // int ndim= parspace(saf); if(arg->sfsfname.size()!=choose(saf.size(),2)){ fprintf(stderr,"\t-> You have supplied: %lu populations, that is %d pairs\n",saf.size(),choose(saf.size(),2)); fprintf(stderr,"\t-> You therefore need to supply %d 2dsfs priors instead of:%lu\n",choose(saf.size(),2),arg->sfsfname.size()); exit(0); } std::vector<double *> sfs; int inc =0; for(int i=0;i<saf.size();i++) for(int j=i+1;j<saf.size();j++){ size_t pairdim = (saf[i]->nChr+1)*(saf[j]->nChr+1); double *ddd=new double[pairdim]; readSFS(arg->sfsfname[inc],pairdim,ddd); normalize(ddd,pairdim); sfs.push_back(ddd); inc++; } double **a1,**b1; a1=new double*[choose(saf.size(),2)]; b1=new double*[choose(saf.size(),2)]; inc=0; for(int i=0;i<saf.size();i++) for(int j=i+1;j<saf.size();j++){ calcCoef((int)saf[i]->nChr,(int)saf[j]->nChr,&a1[inc],&b1[inc]); // fprintf(stderr,"a1[%d]:%p b1[%d]:%p\n",inc,&a1[inc][0],inc,&b1[inc][0]); inc++; } BGZF *fstbg = openFileBG(arg->fstout,".fst.gz"); FILE *fstfp = openFile(arg->fstout,".fst.idx"); char buf[8]="fstv1"; bgzf_write(fstbg,buf,8); fwrite(buf,1,8,fstfp); #if 0 for(int i=0;i<ndim;i++) fprintf(stdout,"%f %f\n",a1[i],b1[i]); exit(0); #endif #if 1 size_t nsafs=saf.size(); fwrite(&nsafs,sizeof(size_t),1,fstfp); for(int i=0;i<nsafs;i++){ size_t clen= strlen(saf[i]->fname); fwrite(&clen,sizeof(size_t),1,fstfp); fwrite(saf[i]->fname,1,clen,fstfp); } #endif int asdf = choose(saf.size(),2); std::vector<double> *ares = new std::vector<double> [choose(saf.size(),2)]; std::vector<double> *bres = new std::vector<double> [choose(saf.size(),2)]; // for(int i=0;i<3;i++) // fprintf(stderr,"ares.size():%lu bres.size():%lu sfs:%p\n",ares[i].size(),bres[i].size(),&sfs[i][0]); std::vector<int> posi; setGloc(saf,nSites); int *posiToPrint = new int[nSites]; for(myMap::iterator it = saf[0]->mm.begin();it!=saf[0]->mm.end();++it) { // fprintf(stderr,"doing chr:%s\n",it->first); if(arg->chooseChr!=NULL){ it = saf[0]->mm.find(arg->chooseChr); if(it==saf[0]->mm.end()){ fprintf(stderr,"Problem finding chr: %s\n",arg->chooseChr); break; } } for(int i=0;i<choose(saf.size(),2);i++){ ares[i].clear(); bres[i].clear(); } posi.clear(); while(1) { int ret=readdata(saf,gls,nSites,it->first,arg->start,arg->stop,posiToPrint,NULL);//read nsites from data // fprintf(stderr,"ret:%d glsx:%lu\n",ret,gls[0]->x); //if(gls[0]->x!=nSites&&arg->chooseChr==NULL&&ret!=-3){ //fprintf(stderr,"continue continue\n"); // continue; //} fprintf(stderr,"\t-> Will now do fst temp dump using a chunk of %lu\n",gls[0]->x); int inc=0; for(int i=0;i<saf.size();i++) for(int j=i+1;j<saf.size();j++){ // fprintf(stderr,"i:%d j:%d inc:%d gls[i]:%p gls[j]:%p sfs:%p a1:%p b1:%p\n",i,j,inc,gls[i],gls[j],sfs[i],&a1[inc][0],&a1[inc][0]); block_coef(gls[i],gls[j],sfs[inc],a1[inc],b1[inc],ares[inc],bres[inc]); inc++; } for(int i=0;i<gls[0]->x;i++) posi.push_back(posiToPrint[i]); for(int i=0;i<gls.size();i++) gls[i]->x =0; if(ret==-2)//no more data in files or in chr, eith way we break; break; } size_t clen = strlen(it->first); fwrite(&clen,sizeof(size_t),1,fstfp); fwrite(it->first,1,clen,fstfp); size_t nit=posi.size(); assert(1==fwrite(&nit,sizeof(size_t),1,fstfp)); int64_t tell = bgzf_tell(fstbg); fwrite(&tell,sizeof(int64_t),1,fstfp); bgzf_write(fstbg,&posi[0],posi.size()*sizeof(int)); int inc =0; for(int i=0;i<saf.size();i++) for(int j=i+1;j<saf.size();j++){ bgzf_write(fstbg,&(ares[inc][0]),ares[inc].size()*sizeof(double)); bgzf_write(fstbg,&(bres[inc][0]),bres[inc].size()*sizeof(double)); inc++; } if(arg->chooseChr!=NULL) break; } delGloc(saf,nSites); destroy(gls,nSites); destroy_args(arg); for(int i=0;i<sfs.size();i++) delete [] sfs[i]; #if 0 fprintf(stderr,"\n\t-> NB NB output is no longer log probs of the frequency spectrum!\n"); fprintf(stderr,"\t-> Output is now simply the expected values! \n"); fprintf(stderr,"\t-> You can convert to the old format simply with log(norm(x))\n"); #endif bgzf_close(fstbg); fclose(fstfp); fprintf(stderr,"\t-> fst index finished with no errors!\n"); return 0; }
static PyObject *PyRRD_xport( PyObject UNUSED(*self), PyObject * args) { PyObject *r; int argc, xsize; char **argv, **legend_v; time_t start, end; unsigned long step, col_cnt; rrd_value_t *data, *datai; if (create_args("xport", args, &argc, &argv) < 0) return NULL; if (rrd_xport(argc, argv, &xsize, &start, &end, &step, &col_cnt, &legend_v, &data) == -1) { PyErr_SetString(ErrorObject, rrd_get_error()); rrd_clear_error(); r = NULL; } else { PyObject *meta_dict, *data_list, *legend_list, *t; unsigned long i, j; rrd_value_t dv; unsigned long row_cnt = ((end - start) / step); r = PyDict_New(); meta_dict = PyDict_New(); legend_list = PyList_New(col_cnt); data_list = PyList_New(row_cnt); PyDict_SetItem(r, PyString_FromString("meta"), meta_dict); PyDict_SetItem(r, PyString_FromString("data"), data_list); datai = data; PyDict_SetItem(meta_dict, PyString_FromString("start"), PyInt_FromLong((long) start)); PyDict_SetItem(meta_dict, PyString_FromString("end"), PyInt_FromLong((long) end)); PyDict_SetItem(meta_dict, PyString_FromString("step"), PyInt_FromLong((long) step)); PyDict_SetItem(meta_dict, PyString_FromString("rows"), PyInt_FromLong((long) row_cnt)); PyDict_SetItem(meta_dict, PyString_FromString("columns"), PyInt_FromLong((long) col_cnt)); PyDict_SetItem(meta_dict, PyString_FromString("legend"), legend_list); for (i = 0; i < col_cnt; i++) { PyList_SET_ITEM(legend_list, i, PyString_FromString(legend_v[i])); } for (i = 0; i < row_cnt; i++) { t = PyTuple_New(col_cnt); PyList_SET_ITEM(data_list, i, t); for (j = 0; j < col_cnt; j++) { dv = *(datai++); if (isnan(dv)) { PyTuple_SET_ITEM(t, j, Py_None); Py_INCREF(Py_None); } else { PyTuple_SET_ITEM(t, j, PyFloat_FromDouble((double) dv)); } } } for (i = 0; i < col_cnt; i++) { rrd_freemem(legend_v[i]); } rrd_freemem(legend_v); rrd_freemem(data); } destroy_args(&argv); return r; }
int main_opt(args *arg){ std::vector<persaf *> &saf =arg->saf; for(int i=0;i<saf.size();i++) assert(saf[i]->pos!=NULL&&saf[i]->saf!=NULL); size_t nSites = arg->nSites; if(nSites == 0){//if no -nSites is specified nSites=nsites(saf,arg); } if(fsizes<T>(saf,nSites)>getTotalSystemMemory()) fprintf(stderr,"\t-> Looks like you will allocate too much memory, consider starting the program with a lower -nSites argument\n"); fprintf(stderr,"\t-> nSites: %lu\n",nSites); float bytes_req_megs =(float) fsizes<T>(saf,nSites)/1024/1024; float mem_avail_megs =(float) getTotalSystemMemory()/1024/1024;//in percentile //fprintf(stderr,"en:%zu to:%f\n",bytes_req_megs,mem_avail_megs); fprintf(stderr,"\t-> The choice of -nSites will require atleast: %f megabyte memory, that is at least: %.2f%% of total memory\n",bytes_req_megs,bytes_req_megs*100/mem_avail_megs); std::vector<Matrix<T> *> gls; for(int i=0;i<saf.size();i++) gls.push_back(alloc<T>(nSites,saf[i]->nChr+1)); int ndim=(int) parspace(saf); double *sfs=new double[ndim]; //temp used for checking pos are in sync setGloc(saf,nSites); while(1) { int ret=readdata(saf,gls,nSites,arg->chooseChr,arg->start,arg->stop,NULL,NULL);//read nsites from data int b=0; //fprintf(stderr,"\t\tRET:%d gls->x:%lu\n",ret,gls[0]->x); if(ret==-2&&gls[0]->x==0)//no more data in files or in chr, eith way we break; break; #if 0 if(saf.size()==1){ if(ret!=-2){ if(gls[0]->x!=nSites&&arg->chooseChr==NULL&&ret!=-3){ // fprintf(stderr,"continue continue\n"); continue; } } }else #endif { if(gls[0]->x!=nSites&&arg->chooseChr==NULL&&ret!=-3){ //fprintf(stderr,"continue continue\n"); continue; } } if(gls[0]->x==0) continue; fprintf(stderr,"\t-> Will run optimization on nSites: %lu\n",gls[0]->x); neverusegoto: if(arg->bootstrap) fprintf(stderr,"Will do bootstrap replicate %d/%d\n",b+1,arg->bootstrap); if(arg->sfsfname.size()!=0) readSFS(arg->sfsfname[0],ndim,sfs); else{ if(arg->seed==-1){ for(int i=0;i<ndim;i++) sfs[i] = (i+1)/((double)(ndim)); }else{ for(int i=0;i<ndim;i++){ double r=drand48(); while(r==0.0) r = drand48(); sfs[i] = r; } } } normalize(sfs,ndim); if(bootstrap==NULL &&arg->bootstrap) bootstrap = new size_t[gls[0]->x]; if(bootstrap){ for(size_t i=0;i<gls[0]->x;i++) bootstrap[i] = lrand48() % gls[0]->x; std::sort(bootstrap,bootstrap+gls[0]->x); } double lik; if(arg->emAccl==0) lik = em<float>(sfs,arg->tole,arg->maxIter,arg->nThreads,ndim,gls); else lik = emAccl<float>(sfs,arg->tole,arg->maxIter,arg->nThreads,ndim,gls,arg->emAccl); fprintf(stderr,"likelihood: %f\n",lik); fprintf(stderr,"------------\n"); #if 1 // fprintf(stdout,"#### Estimate of the sfs ####\n"); //all gls have the same ->x. That means the same numbe of sites. for(int x=0;x<ndim;x++) fprintf(stdout,"%f ",((double)gls[0]->x)*sfs[x]); fprintf(stdout,"\n"); fflush(stdout); #endif if(++b<arg->bootstrap) goto neverusegoto; for(int i=0;i<gls.size();i++) gls[i]->x =0; if(ret==-2&&arg->chooseChr!=NULL) break; if(arg->onlyOnce) break; } delGloc(saf,nSites); destroy(gls,nSites); destroy_args(arg); delete [] sfs; fprintf(stderr,"\n\t-> NB NB output is no longer log probs of the frequency spectrum!\n"); fprintf(stderr,"\t-> Output is now simply the expected values! \n"); fprintf(stderr,"\t-> You can convert to the old format simply with log(norm(x))\n"); return 0; }
int printMulti(args *arg){ fprintf(stderr,"[%s]\n",__FUNCTION__); std::vector<persaf *> &saf =arg->saf; for(int i=0;i<saf.size();i++) assert(saf[i]->pos!=NULL&&saf[i]->saf!=NULL); size_t nSites = arg->nSites; if(nSites == 0){//if no -nSites is specified nSites=nsites(saf,arg); } std::vector<Matrix<T> *> gls; for(int i=0;i<saf.size();i++) gls.push_back(alloc<T>(nSites,saf[i]->nChr+1)); int ndim=(int) parspace(saf); double *sfs=new double[ndim]; //temp used for checking pos are in sync setGloc(saf,nSites); int *posiToPrint = new int[nSites]; //used for printout old format FILE **oldfp = NULL; gzFile oldpos = Z_NULL; if(arg->oldout){ oldfp = new FILE*[saf.size()]; for(int i=0;i<saf.size();i++){ size_t newlen = strlen(saf[i]->fname)+100; char *tmp =(char*) calloc(newlen,sizeof(char)); tmp = strncpy(tmp,saf[i]->fname,strlen(saf[i]->fname)-4); fprintf(stderr,"\t-> Generating outputfile: %s\n",tmp); oldfp[i] = fopen(tmp,"wb"); free(tmp); } size_t newlen = strlen(dirname(saf[0]->fname))+100; char *tmp = (char*) calloc(newlen,sizeof(char)); snprintf(tmp,newlen,"%s/shared.pos.gz",dirname(saf[0]->fname)); fprintf(stderr,"\t-> Generating outputfile: %s\n",tmp); oldpos = gzopen(tmp,"wb"); free(tmp); } while(1) { static char *curChr=NULL; int ret=readdata(saf,gls,nSites,arg->chooseChr,arg->start,arg->stop,posiToPrint,&curChr);//read nsites from data // fprintf(stderr,"ret:%d gls->x:%lu\n",ret,gls[0]->x); if(arg->oldout==0){ for(int s=0;s<gls[0]->x;s++){ if(arg->chooseChr==NULL) fprintf(stdout,"%s\t%d",curChr,posiToPrint[s]+1); else fprintf(stdout,"%s\t%d",arg->chooseChr,posiToPrint[s]+1); for(int i=0;i<saf.size();i++) for(int ii=0;ii<gls[i]->y;ii++) fprintf(stdout,"\t%f",log(gls[i]->mat[s][ii])); fprintf(stdout,"\n"); } }else{ for(int s=0;s<gls[0]->x;s++){ if(arg->chooseChr==NULL) gzprintf(oldpos,"%s\t%d\n",curChr,posiToPrint[s]+1); else gzprintf(oldpos,"%s\t%d\n",arg->chooseChr,posiToPrint[s]+1); for(int i=0;i<saf.size();i++){ double mytmp[gls[i]->y]; for(int ii=0;ii<gls[i]->y;ii++) mytmp[ii] = log(gls[i]->mat[s][ii]); fwrite(mytmp,sizeof(double),gls[i]->y,oldfp[i]); } } } if(ret==-3&&gls[0]->x==0){//no more data in files or in chr, eith way we break;g //fprintf(stderr,"breaking\n"); break; } for(int i=0;i<gls.size();i++) gls[i]->x =0; #if 0 if(gls[0]->x!=nSites&&arg->chooseChr==NULL&&ret!=-3){ fprintf(stderr,"continue continue\n"); continue; } #endif if(ret==-2&&arg->chooseChr!=NULL) break; if(arg->onlyOnce) break; } delGloc(saf,nSites); destroy(gls,nSites); delete [] sfs; delete [] posiToPrint; if(arg->oldout==1){ for(int i=0;i<saf.size();i++) fclose(oldfp[i]); delete [] oldfp; gzclose(oldpos); } destroy_args(arg); fprintf(stderr,"\t-> Run completed\n"); return 0; }
static PyObject *PyRRD_fetch( PyObject UNUSED(*self), PyObject * args) { PyObject *r; rrd_value_t *data, *datai; unsigned long step, ds_cnt; time_t start, end; int argc; char **argv, **ds_namv; if (create_args("fetch", args, &argc, &argv) < 0) return NULL; if (rrd_fetch(argc, argv, &start, &end, &step, &ds_cnt, &ds_namv, &data) == -1) { PyErr_SetString(ErrorObject, rrd_get_error()); rrd_clear_error(); r = NULL; } else { /* Return : ((start, end, step), (name1, name2, ...), [(data1, data2, ..), ...]) */ PyObject *range_tup, *dsnam_tup, *data_list, *t; unsigned long i, j, row; rrd_value_t dv; row = (end - start) / step; r = PyTuple_New(3); range_tup = PyTuple_New(3); dsnam_tup = PyTuple_New(ds_cnt); data_list = PyList_New(row); PyTuple_SET_ITEM(r, 0, range_tup); PyTuple_SET_ITEM(r, 1, dsnam_tup); PyTuple_SET_ITEM(r, 2, data_list); datai = data; PyTuple_SET_ITEM(range_tup, 0, PyInt_FromLong((long) start)); PyTuple_SET_ITEM(range_tup, 1, PyInt_FromLong((long) end)); PyTuple_SET_ITEM(range_tup, 2, PyInt_FromLong((long) step)); for (i = 0; i < ds_cnt; i++) PyTuple_SET_ITEM(dsnam_tup, i, PyString_FromString(ds_namv[i])); for (i = 0; i < row; i++) { t = PyTuple_New(ds_cnt); PyList_SET_ITEM(data_list, i, t); for (j = 0; j < ds_cnt; j++) { dv = *(datai++); if (isnan(dv)) { PyTuple_SET_ITEM(t, j, Py_None); Py_INCREF(Py_None); } else { PyTuple_SET_ITEM(t, j, PyFloat_FromDouble((double) dv)); } } } for (i = 0; i < ds_cnt; i++) rrd_freemem(ds_namv[i]); rrd_freemem(ds_namv); /* rrdtool don't use PyMem_Malloc :) */ rrd_freemem(data); } destroy_args(&argv); return r; }
int fst_stat2(int argc,char **argv){ int pS,pE;//physical start,physical end int begI,endI;//position in array for pS, pE; char *bname = *argv; fprintf(stderr,"\t-> Assuming idxname:%s\n",bname); perfst *pf = perfst_init(bname); args *pars = getArgs(--argc,++argv); fprintf(stderr,"win:%d step:%d\n",pars->win,pars->step); int *ppos = NULL; int chs = choose(pf->names.size(),2); // fprintf(stderr,"choose:%d \n",chs); double **ares = new double*[chs]; double **bres = new double*[chs]; double unweight[chs]; double wa[chs]; double wb[chs]; size_t nObs =0; for(myFstMap::iterator it=pf->mm.begin();it!=pf->mm.end();++it){ if(pars->chooseChr!=NULL){ it = pf->mm.find(pars->chooseChr); if(it==pf->mm.end()){ fprintf(stderr,"Problem finding chr: %s\n",pars->chooseChr); break; } } fprintf(stderr,"nSites:%lu\n",it->second.nSites); if(it->second.nSites==0&&pars->chooseChr!=NULL) break; else if(it->second.nSites==0&&pars->chooseChr==NULL) continue; bgzf_seek(pf->fp,it->second.off,SEEK_SET); ppos = new int[it->second.nSites]; bgzf_read(pf->fp,ppos,sizeof(int)*it->second.nSites); for(int i=0;i<it->second.nSites;i++) ppos[i]++; for(int i=0;i<choose(pf->names.size(),2);i++){ ares[i] = new double[it->second.nSites]; bres[i] = new double[it->second.nSites]; bgzf_read(pf->fp,ares[i],sizeof(double)*it->second.nSites); bgzf_read(pf->fp,bres[i],sizeof(double)*it->second.nSites); } if(pars->type==0) pS = ((pars->start!=-1?pars->start:ppos[0])/pars->step)*pars->step +pars->step; else if(pars->type==1) pS = (pars->start!=-1?pars->start:ppos[0]); else if(pars->type==2) pS = 1; pE = pS+pars->win; begI=endI=0; // fprintf(stderr,"ps:%d\n",pS);exit(0); if(pE>(pars->stop!=-1?pars->stop:ppos[it->second.nSites-1])){ fprintf(stderr,"end of dataset is before end of window: end of window:%d last position in chr:%d\n",pE,ppos[it->second.nSites-1]); // return str; } while(ppos[begI]<pS) begI++; endI=begI; while(ppos[endI]<pE) endI++; //fprintf(stderr,"begI:%d endI:%d\n",begI,endI); while(1){ for(int i=0;i<chs;i++) unweight[i] = wa[i] = wb[i] =0.0; nObs=0; fprintf(stdout,"(%d,%d)(%d,%d)(%d,%d)\t%s\t%d",begI,endI-1,ppos[begI],ppos[endI-1],pS,pE,it->first,pS+(pE-pS)/2); for(int s=begI;s<endI;s++){ #if 0 fprintf(stdout,"%s\t%d",it->first,ppos[s]+1); for(int i=0;i<choose(pf->names.size(),2);i++) fprintf(stdout,"\t%f\t%f",ares[i][s],bres[i][s]); fprintf(stdout,"\n"); #endif for(int i=0;i<choose(pf->names.size(),2);i++){ unweight[i] += ares[i][s]/bres[i][s]; wa[i] += ares[i][s]; wb[i] += bres[i][s]; } nObs++; } double fstW[chs]; for(int i=0;nObs>0&&i<chs;i++){ fstW[i] = wa[i]/wb[i]; fprintf(stdout,"\t%f\t%f",unweight[i]/(1.0*nObs),fstW[i]); } if(chs==3){ //if chr==3 then we have 3pops and we will also calculate pbs statistics calcpbs(fstW);//<- NOTE: the pbs values will replace the fstW values for(int i=0;i<3;i++) fprintf(stdout,"\t%f",fstW[i]); } fprintf(stdout,"\n"); pS += pars->step; pE =pS+pars->win; if(pE>(pars->stop!=-1?pars->stop:ppos[it->second.nSites-1])) break; while(ppos[begI]<pS) begI++; while(ppos[endI]<pE) endI++; } for(int i=0;i<choose(pf->names.size(),2);i++){ delete [] ares[i]; delete [] bres[i]; } delete [] ppos; if(pars->chooseChr!=NULL) break; } delete [] ares; delete [] bres; destroy_args(pars); perfst_destroy(pf); return 0; }
int fst_print(int argc,char **argv){ char *bname = *argv; fprintf(stderr,"\t-> Assuming idxname:%s\n",bname); perfst *pf = perfst_init(bname); writefst_header(stderr,pf); args *pars = getArgs(--argc,++argv); int *ppos = NULL; fprintf(stderr,"choose:%d \n",choose(pf->names.size(),2)); double **ares = new double*[choose(pf->names.size(),2)]; double **bres = new double*[choose(pf->names.size(),2)]; for(myFstMap::iterator it=pf->mm.begin();it!=pf->mm.end();++it){ if(pars->chooseChr!=NULL){ it = pf->mm.find(pars->chooseChr); if(it==pf->mm.end()){ fprintf(stderr,"Problem finding chr: %s\n",pars->chooseChr); break; } } if(it->second.nSites==0) continue; bgzf_seek(pf->fp,it->second.off,SEEK_SET); ppos = new int[it->second.nSites]; bgzf_read(pf->fp,ppos,sizeof(int)*it->second.nSites); for(int i=0;i<choose(pf->names.size(),2);i++){ ares[i] = new double[it->second.nSites]; bres[i] = new double[it->second.nSites]; bgzf_read(pf->fp,ares[i],sizeof(double)*it->second.nSites); bgzf_read(pf->fp,bres[i],sizeof(double)*it->second.nSites); } int first=0; if(pars->start!=-1) while(ppos[first]<pars->start) first++; int last=it->second.nSites; if(pars->stop!=-1&&pars->stop<=ppos[last-1]){ last=first; while(ppos[last]<pars->stop) last++; } fprintf(stderr,"pars->stop:%d ppos:%d first:%d last:%d\n",pars->stop,ppos[last-1],first,last); for(int s=first;s<last;s++){ fprintf(stdout,"%s\t%d",it->first,ppos[s]+1); for(int i=0;i<choose(pf->names.size(),2);i++) fprintf(stdout,"\t%f\t%f",ares[i][s],bres[i][s]); fprintf(stdout,"\n"); } for(int i=0;i<choose(pf->names.size(),2);i++){ delete [] ares[i]; delete [] bres[i]; } delete [] ppos; if(pars->chooseChr!=NULL) break; } delete [] ares; delete [] bres; destroy_args(pars); perfst_destroy(pf); return 0; }
int fst_stat(int argc,char **argv){ char *bname = *argv; fprintf(stderr,"\t-> Assuming idxname:%s\n",bname); perfst *pf = perfst_init(bname); args *pars = getArgs(--argc,++argv); int *ppos = NULL; int chs = choose(pf->names.size(),2); // fprintf(stderr,"choose:%d \n",chs); double **ares = new double*[chs]; double **bres = new double*[chs]; double unweight[chs]; double wa[chs]; double wb[chs]; size_t nObs[chs]; for(int i=0;i<chs;i++){ unweight[i] = wa[i] = wb[i] =0.0; nObs[i] = 0; } for(myFstMap::iterator it=pf->mm.begin();it!=pf->mm.end();++it){ if(pars->chooseChr!=NULL){ it = pf->mm.find(pars->chooseChr); if(it==pf->mm.end()){ fprintf(stderr,"Problem finding chr: %s\n",pars->chooseChr); break; } } if(it->second.nSites==0) continue; bgzf_seek(pf->fp,it->second.off,SEEK_SET); ppos = new int[it->second.nSites]; bgzf_read(pf->fp,ppos,sizeof(int)*it->second.nSites); for(int i=0;i<choose(pf->names.size(),2);i++){ ares[i] = new double[it->second.nSites]; bres[i] = new double[it->second.nSites]; bgzf_read(pf->fp,ares[i],sizeof(double)*it->second.nSites); bgzf_read(pf->fp,bres[i],sizeof(double)*it->second.nSites); } int first=0; if(pars->start!=-1) while(ppos[first]<pars->start) first++; int last=it->second.nSites; if(pars->stop!=-1&&pars->stop<=ppos[last-1]){ last=first; while(ppos[last]<pars->stop) last++; } // fprintf(stderr,"pars->stop:%d ppos:%d first:%d last:%d\n",pars->stop,ppos[last-1],first,last); for(int s=first;s<last;s++){ #if 0 fprintf(stdout,"%s\t%d",it->first,ppos[s]+1); for(int i=0;i<choose(pf->names.size(),2);i++) fprintf(stdout,"\t%f\t%f",ares[i][s],bres[i][s]); fprintf(stdout,"\n"); #endif for(int i=0;i<choose(pf->names.size(),2);i++){ if(bres[i][s]!=0){ unweight[i] += ares[i][s]/bres[i][s]; nObs[i]++; } wa[i] += ares[i][s]; wb[i] += bres[i][s]; } } for(int i=0;i<choose(pf->names.size(),2);i++){ delete [] ares[i]; delete [] bres[i]; } delete [] ppos; if(pars->chooseChr!=NULL) break; } double fstUW[chs]; double fstW[chs]; for(int i=0;i<chs;i++){ fstUW[i] = unweight[i]/(1.0*nObs[i]); fstW[i] = wa[i]/wb[i]; fprintf(stderr,"\t-> FST.Unweight[nObs:%lu]:%f Fst.Weight:%f\n",nObs[i],fstUW[i],fstW[i]); fprintf(stdout,"%f %f\n",fstUW[i],fstW[i]); } if(chs==3){ //if chr==3 then we have 3pops and we will also calculate pbs statistics calcpbs(fstW);//<- NOTE: the pbs values will replace the fstW values for(int i=0;i<3;i++) fprintf(stderr,"\t-> pbs.pop%d\t%f\n",i+1,fstW[i]); } delete [] ares; delete [] bres; destroy_args(pars); perfst_destroy(pf); return 0; }