ribi::ManyDigitNewick::ManyDigitNewick( const std::vector<ManyDigitNewickDerivative>& derivatives, const int sum_above_zero, const int sum_above_one) : m_derivatives(derivatives), m_probability(-1.0), m_denominator( CalculateDenominator(sum_above_zero,sum_above_one)), m_sum_terms_above_zero(sum_above_zero), m_sum_terms_above_one(sum_above_one) { }
bool GenerateDenominator(vector<vector<double>>& denom) { uint64_t dim=denom.size(); if(dim==0)return false; if(dim!=denom[0].size())return false; vector<vector<double>> com(dim+3,vector<double>(dim+3,0)); vector<double> fac(dim+3,0); GenerateCombinatorial(com); GenerateFactorial(fac); for(uint64_t i=1;i<dim;i++){ for(uint64_t j=1;j<dim;j++){ denom[i][j]=CalculateDenominator(com,fac,(int)i,(int)j); } } return true; }