#include "CVDRiskCalculator.h" // Calculate the ACC-AHA guideline 10-year CVD risk double CVDRiskCalculator::CVDRisk(double age, double tchol, double hdl, double sysbp, bool hibperx, bool diabe, bool smoken, bool male, bool black) { double cvdrisk = 0; double lnage = log(age); double lnagesq = pow(log(age),2); double logage = log(age); double lntchol = log(tchol); double lnage_tchol = lnage * lntchol; double logtchol = log(tchol); double logage_tchol = logage * logtchol; double lnhdl = log(hdl); double lnage_hdl = lnage * lnhdl; double loghdl = log(hdl); double logage_hdl = logage * loghdl; double bp_tr; if (hibperx==1) { bp_tr = sysbp; } else { bp_tr = 0 ; } double bp_untr; if (hibperx == 0) { bp_untr = sysbp; } else{ bp_untr = 0 ; } double logbp_tr = log(bp_tr); if (bp_tr == 0) { logbp_tr =0; } double logbp_untr = log(bp_untr); if (bp_untr == 0) { logbp_untr =0 ; } double logage_bptr = logage * logbp_tr; double logage_bpuntr = logage * logbp_untr ; double logage_smk = logage * smoken; if((black == 0) & (male == 0)) { double y_women_wh = -29.799*lnage + 4.884*lnagesq + 13.540*lntchol - 3.114*lnage_tchol - 13.578*lnhdl + 3.149*lnage_hdl + 2.019*logbp_tr + 1.957*logbp_untr + 7.574*smoken - 1.665*logage_smk +0.661*diabe; cvdrisk = 1-pow(0.9665,exp(y_women_wh + 29.18)); } else if((black == 1) & (male == 0)) { double y_women_bk = 17.114*lnage + 0.940*lntchol - 18.920*lnhdl + 4.475*lnage_hdl + 29.291*logbp_tr - 6.432*logage_bptr + 27.820*logbp_untr - 6.087*logage_bpuntr + 0.691*smoken + 0.874*diabe; cvdrisk = 1-pow(0.9533,exp(y_women_bk - 86.61)); } else if((black == 0) & (male == 1)) { double y_men_wh = 12.344*logage + 11.853*logtchol - 2.664*logage_tchol - 7.99*loghdl + 1.769*logage_hdl + 1.797*logbp_tr + 1.764*logbp_untr + 7.837*smoken - 1.795*logage_smk + 0.658*diabe; cvdrisk = 1-pow(0.9144,exp(y_men_wh - 61.18)); } else if((black == 1) & (male == 1)) { double y_men_bk = 2.469*logage + 0.302*logtchol - 0.307*loghdl + 1.916*logbp_tr + 1.809*logbp_untr + 0.549*smoken + 0.645*diabe; cvdrisk = 1-pow(0.8954,exp(y_men_bk - 19.54)); } return cvdrisk; }