示例#1
0
///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;
}
示例#2
0
//-------------------------------------------------------------
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;            
        }
    }
}
示例#3
0
///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);
}