//Function to summarize results from BeQTL and return a dataframe // [[Rcpp::export]] Rcpp::DataFrame SumRes(const arma::mat & cormat, const arma::mat & errmat, const Rcpp::DataFrame SnpDF, const Rcpp::DataFrame Genedf, const int samplesize, const double tcutoff){ Rcpp::Rcout<<"Generating Tmat"<<std::endl; arma::mat tmat = sqrt(samplesize-2)*(cormat/(sqrt(1-square(cormat)))); Rcpp::Rcout<<"Finding strong t"<<std::endl; arma::uvec goods = find(abs(tmat)>tcutoff); Rcpp::Rcout<<"Generating matrix index"<<std::endl; arma::umat goodmat = Ind(tmat.n_rows,goods); Rcpp::Rcout<<"Subsetting tmat"<<std::endl; Rcpp::Rcout<<"This many good results"<<goodmat.n_rows<<std::endl; arma::vec tvec = tmat(goods); Rcpp::Rcout<<"Subsetting Errmat"<<std::endl; arma::vec errvec = errmat(goods); Rcpp::Rcout<<"Generating SNP and Gene lists"<<std::endl; Rcpp::IntegerVector GoodGenes = Rcpp::wrap(arma::conv_to<arma::ivec>::from(goodmat.col(0))); Rcpp::IntegerVector GoodSNPs = Rcpp::wrap(arma::conv_to<arma::ivec>::from(goodmat.col(1))); //Subset SNP anno Rcpp::CharacterVector SNPnames = SnpDF["rsid"]; SNPnames = SNPnames[GoodSNPs]; arma::ivec SNPchr = Rcpp::as<arma::ivec>(SnpDF["Chrom"]); SNPchr = SNPchr(goodmat.col(1)); arma::ivec SNPpos = Rcpp::as<arma::ivec>(SnpDF["Pos"]); SNPpos = SNPpos(goodmat.col(1)); //Subset Geneanno Rcpp::CharacterVector GeneNames = Genedf["Symbol"]; GeneNames = GeneNames[GoodGenes]; arma::ivec Genechr = Rcpp::as<arma::ivec>(Genedf["Chrom"]); Genechr = Genechr(goodmat.col(0)); arma::ivec Genestart = Rcpp::as<arma::ivec>(Genedf["Start"]); Genestart = Genestart(goodmat.col(0)); arma::ivec Genestop = Rcpp::as<arma::ivec>(Genedf["Stop"]); Genestop = Genestop(goodmat.col(0)); arma::ivec CisDist(GoodGenes.length()); Rcpp::Rcout<<"Calculating Cisdist"<<std::endl; CisDist = arma::min(arma::join_cols(abs(Genestop-SNPpos),abs(Genestart-SNPpos)),1); Rcpp::Rcout<<"CisDist Calculated"<<std::endl; CisDist.elem(find(Genechr!=SNPchr)).fill(-1); return Rcpp::DataFrame::create(Rcpp::Named("SNP")=SNPnames, Rcpp::Named("Gene")=GeneNames, Rcpp::Named("t-stat")=Rcpp::wrap(tvec), Rcpp::Named("err")=Rcpp::wrap(errvec), Rcpp::Named("CisDist")=Rcpp::wrap(CisDist)); }
//============================================================================== Ifpack_DropFilter::Ifpack_DropFilter(const Teuchos::RefCountPtr<Epetra_RowMatrix>& Matrix, double DropTol) : A_(Matrix), DropTol_(DropTol), MaxNumEntries_(0), MaxNumEntriesA_(0), NumNonzeros_(0) { // use this filter only on serial matrices if (A_->Comm().NumProc() != 1) { cerr << "Ifpack_DropFilter can be used with Comm().NumProc() == 1" << endl; cerr << "only. This class is a tool for Ifpack_AdditiveSchwarz," << endl; cerr << "and it is not meant to be used otherwise." << endl; exit(EXIT_FAILURE); } if ((A_->NumMyRows() != A_->NumGlobalRows()) || (A_->NumMyRows() != A_->NumMyCols())) IFPACK_CHK_ERRV(-2); NumRows_ = A_->NumMyRows(); MaxNumEntriesA_ = A_->MaxNumEntries(); NumEntries_.resize(NumRows_); Indices_.resize(MaxNumEntriesA_); Values_.resize(MaxNumEntriesA_); vector<int> Ind(MaxNumEntriesA_); vector<double> Val(MaxNumEntriesA_); for (int i = 0 ; i < NumRows_ ; ++i) { NumEntries_[i] = MaxNumEntriesA_; int Nnz; IFPACK_CHK_ERRV(ExtractMyRowCopy(i,MaxNumEntriesA_,Nnz, &Val[0], &Ind[0])); NumEntries_[i] = Nnz; NumNonzeros_ += Nnz; if (Nnz > MaxNumEntries_) MaxNumEntries_ = Nnz; } }
cv::Mat PM_type::nms(const cv::Mat &boxes, float overlap) //% Non-maximum suppression. //% pick = nms(boxes, overlap) //% //% Greedily select high-scoring detections and skip detections that are //% significantly covered by a previously selected detection. //% //% Return value //% pick Indices of locally maximal detections //% //% Arguments //% boxes Detection bounding boxes (see pascal_test.m) //% overlap Overlap threshold for suppression //% For a selected box Bi, all boxes Bj that are covered by //% more than overlap are suppressed. Note that 'covered' is //% is |Bi \cap Bj| / |Bj|, not the PASCAL intersection over //% union measure. { if( boxes.empty() ) return boxes; cv::Mat x1 = boxes.col(0); cv::Mat y1 = boxes.col(1); cv::Mat x2 = boxes.col(2); cv::Mat y2 = boxes.col(3); cv::Mat s = boxes.col(boxes.cols - 1); cv::Mat area = x2 - x1 + 1; area = area.mul(y2-y1+1); vector<int> Ind( s.rows, 0 ); cv::Mat Idx(s.rows, 1, CV_32SC1, &Ind[0]); sortIdx( s, Idx, CV_SORT_EVERY_COLUMN+CV_SORT_ASCENDING ); vector<int> pick; while( !Ind.empty() ){ int last = Ind.size() - 1; int i = Ind[last]; pick.push_back(i); vector<int> suppress( 1, last ); for( int pos=0; pos<last; pos++ ){ int j = Ind[pos]; float xx1 = std::max(x1.at<float>(i), x1.at<float>(j)); float yy1 = std::max(y1.at<float>(i), y1.at<float>(j)); float xx2 = std::min(x2.at<float>(i), x2.at<float>(j)); float yy2 = std::min(y2.at<float>(i), y2.at<float>(j)); float w = xx2-xx1+1; float h = yy2-yy1+1; if( w>0 && h>0 ){ // compute overlap float area_intersection = w * h; float o1 = area_intersection / area.at<float>(j); float o2 = area_intersection / area.at<float>(i); float o = std::max(o1,o2); if( o>overlap ) suppress.push_back(pos); } } std::set<int> supp( suppress.begin(), suppress.end() ); vector<int> Ind2; for( int i=0; i!=Ind.size(); i++ ){ if( supp.find(i)==supp.end() ) Ind2.push_back( Ind[i] ); } Ind = Ind2; } cv::Mat ret(pick.size(), boxes.cols, boxes.type()); for( unsigned i=0; i<pick.size(); i++ ) boxes.row( pick[i] ).copyTo( ret.row(i) ); return ret; }