///40. Several Lorentzian double Mult_Lorentzian(const double& X, const int& Nb_peak, const vec& Mean, const vec& Width, const vec& Ampl){ double result = 0.; for (int i = 0; i < Nb_peak; i++) { assert(Width(i)>0); result += Lorentzian(X, Mean(i), Width(i), Ampl(i)); } return result; }
//------------------------------------------------------------- double peak::get_density_ODF(const double &theta) //------------------------------------------------------------- { switch (method) { case 1: { return ODF_sd(theta, mean, params); break; } case 2: { return ODF_hard(theta, mean, s_dev, ampl) + ODF_hard(theta - pi, mean, s_dev, ampl) + ODF_hard(theta + pi, mean, s_dev, ampl); break; } case 3: { return Gaussian(theta, mean, s_dev, ampl) + Gaussian(theta - pi, mean, s_dev, ampl) + Gaussian(theta + pi, mean, s_dev, ampl); break; } case 4: { return Lorentzian(theta, mean, width, ampl) + Lorentzian(theta - pi, mean, width, ampl) + Lorentzian(theta + pi, mean, width, ampl); break; } case 5: { return PseudoVoigt(theta, mean, s_dev, width, ampl, params) + PseudoVoigt(theta - pi, mean, s_dev, width, ampl, params) + PseudoVoigt(theta + pi, mean, s_dev, width, ampl, params); break; } case 6: { assert(width > 0.); double inv_width = 1./width; return Pearson7(theta, mean, inv_width, params) + Pearson7(theta - pi, mean, inv_width, params) + Pearson7(theta + pi, mean, inv_width, params); break; } case 7: { return 1.; break; } default : { cout << "Error: The peak type specified is not recognized" << endl; return 0; break; } } }
///5. Pseudo-Voigt double PseudoVoigt(const double& X, const double& eta, const double& mean, const double &width_Lor, const double& sd_Gau, const double& ampl){ assert(width_Lor>0); assert(sd_Gau>0); return eta * Lorentzian(X, mean, width_Lor, ampl) + (1.-eta) * Gaussian(X, mean, sd_Gau, ampl); }