diff options
Diffstat (limited to 'src/lmm.cpp')
| -rw-r--r-- | src/lmm.cpp | 40 |
1 files changed, 13 insertions, 27 deletions
diff --git a/src/lmm.cpp b/src/lmm.cpp index 324e310..d3bfbbf 100644 --- a/src/lmm.cpp +++ b/src/lmm.cpp @@ -1876,22 +1876,6 @@ void LMM::Analyze(std::function< SnpNameValues(size_t) >& fetch_snp, */ -// Results for LMM. -class SUMSTAT2 { -public: - double beta; // REML estimator for beta. - double se; // SE for beta. - double lambda_remle; // REML estimator for lambda. - double lambda_mle; // MLE estimator for lambda. - double p_wald; // p value from a Wald test. - double p_lrt; // p value from a likelihood ratio test. - double p_score; // p value from a score test. - double logl_H1; // log likelihood under the alternative - // hypothesis as a measure of goodness of fit, - // see https://github.com/genetics-statistics/GEMMA/issues/81 -}; - - void LMM::mdb_analyze(std::function< SnpNameValues2(size_t) >& fetch_snp, const gsl_matrix *U, const gsl_vector *eval, @@ -2211,11 +2195,11 @@ void LMM::mdb_calc_gwa(const gsl_matrix *U, const gsl_vector *eval, auto success = cursor.get(key, value, mdb_fetch); mdb_fetch = MDB_NEXT; - string marker; uint8_t chr; - uint64_t pos; + uint32_t pos; // size_t pos; vector<double> gs; + MarkerChrPos markerinfo; if (success) { size_t num_floats = value.size() / sizeof(float); @@ -2230,18 +2214,20 @@ void LMM::mdb_calc_gwa(const gsl_matrix *U, const gsl_vector *eval, // "S>L>L>" const uint8_t* data = reinterpret_cast<const uint8_t*>(key.data()); chr = static_cast<uint8_t>(data[1]); - // Extract big-endian uint32 manually abcd -> dcba - pos = (static_cast<uint32_t>(data[2]) << 24) | - (static_cast<uint32_t>(data[4]) << 8) | - (static_cast<uint32_t>(data[3]) << 16) | - (static_cast<uint32_t>(data[5])); - auto pos2 = __builtin_bswap32(pos); + // Extract big-endian uint32 + // uint32_t rest = static_cast<uint32_t>(data[2]); + uint32_t pos = (data[2] << 24) | (data[3] << 16) | + (data[4] << 8) | data[5]; + + uint32_t num = (data[6] << 24) | (data[7] << 16) | + (data[8] << 8) | data[9]; string_view value2; marker_mdb.get(rtxn,key,value2); - marker = string(value2); + auto marker = string(value2); // 1 rs13476251 174792257 - cout << static_cast<int>(chr) << ":" << pos2 << "|" << pos << " " << marker << endl ; + // cout << static_cast<int>(chr) << ":" << pos2 << " line " << rest2 << ":" << marker << endl ; + markerinfo = make_tuple(marker,chr,pos,num); auto size = num_floats; gs.reserve(size); @@ -2250,7 +2236,7 @@ void LMM::mdb_calc_gwa(const gsl_matrix *U, const gsl_vector *eval, } // cout << "!!!!" << size << snp << ": " << gs[0] << "," << gs[1] << "," << gs[2] << "," << gs[3] << endl; } - return make_tuple(success, chr, pos, marker, gs); + return make_tuple(success, chr, pos, markerinfo, gs); }; LMM::mdb_analyze(fetch_snp,U,eval,UtW,Uty,W,y,gwasnps,num_markers); } |
