| 78 |
{ |
{ |
| 79 |
const SymMat<Double> inv_S_red( Inverse3(S_red) ); |
const SymMat<Double> inv_S_red( Inverse3(S_red) ); |
| 80 |
|
|
| 81 |
if( brat.enumPointGroup() == C2h_Y && brat.enumBravaisLattice() == Prim ) |
if( brat.enumLaueGroup() == C2h_Y && brat.enumBravaisLattice() == Prim ) |
| 82 |
{ |
{ |
| 83 |
assert( inv_S_red(0,2) <= 0.0 && |
assert( inv_S_red(0,2) <= 0.0 && |
| 84 |
inv_S_red(0,0) * 0.9999 < inv_S_red(2,2) |
inv_S_red(0,0) * 0.9999 < inv_S_red(2,2) |
| 85 |
&& fabs( inv_S_red(0,2) ) * 1.9999 < inv_S_red(2,2) |
&& fabs( inv_S_red(0,2) ) * 1.9999 < inv_S_red(2,2) |
| 86 |
&& fabs( inv_S_red(0,2) ) * 1.9999 < inv_S_red(0,0) ); |
&& fabs( inv_S_red(0,2) ) * 1.9999 < inv_S_red(0,0) ); |
| 87 |
} |
} |
| 88 |
else if( brat.enumPointGroup() == C2h_Z && brat.enumBravaisLattice() == Prim ) |
else if( brat.enumLaueGroup() == C2h_Z && brat.enumBravaisLattice() == Prim ) |
| 89 |
{ |
{ |
| 90 |
assert( inv_S_red(0,1) <= 0.0 |
assert( inv_S_red(0,1) <= 0.0 |
| 91 |
&& inv_S_red(0,0) * 0.9999 < inv_S_red(1,1) |
&& inv_S_red(0,0) * 0.9999 < inv_S_red(1,1) |
| 92 |
&& fabs( inv_S_red(0,1) ) * 1.9999 < inv_S_red(0,0) |
&& fabs( inv_S_red(0,1) ) * 1.9999 < inv_S_red(0,0) |
| 93 |
&& fabs( inv_S_red(0,1) ) * 1.9999 < inv_S_red(1,1) ); |
&& fabs( inv_S_red(0,1) ) * 1.9999 < inv_S_red(1,1) ); |
| 94 |
} |
} |
| 95 |
else if( brat.enumPointGroup() == C2h_X && brat.enumBravaisLattice() == Prim ) |
else if( brat.enumLaueGroup() == C2h_X && brat.enumBravaisLattice() == Prim ) |
| 96 |
{ |
{ |
| 97 |
assert( inv_S_red(1,2) <= 0.0 |
assert( inv_S_red(1,2) <= 0.0 |
| 98 |
&& inv_S_red(1,1) * 0.9999 < inv_S_red(2,2) |
&& inv_S_red(1,1) * 0.9999 < inv_S_red(2,2) |
| 99 |
&& fabs( inv_S_red(1,2) ) * 1.9999 < inv_S_red(1,1) |
&& fabs( inv_S_red(1,2) ) * 1.9999 < inv_S_red(1,1) |
| 100 |
&& fabs( inv_S_red(1,2) ) * 1.9999 < inv_S_red(2,2) ); |
&& fabs( inv_S_red(1,2) ) * 1.9999 < inv_S_red(2,2) ); |
| 101 |
} |
} |
| 102 |
else if( brat.enumPointGroup() == C2h_Y && brat.enumBravaisLattice() == BaseZ ) |
else if( brat.enumLaueGroup() == C2h_Y && brat.enumBravaisLattice() == BaseZ ) |
| 103 |
{ |
{ |
| 104 |
assert( inv_S_red(0,2) <= 0.0 |
assert( inv_S_red(0,2) <= 0.0 |
| 105 |
&& fabs( inv_S_red(0,2) ) * 0.9999 < inv_S_red(2,2) |
&& fabs( inv_S_red(0,2) ) * 0.9999 < inv_S_red(2,2) |
| 106 |
&& fabs( inv_S_red(0,2) ) * 1.9999 < inv_S_red(0,0) ); |
&& fabs( inv_S_red(0,2) ) * 1.9999 < inv_S_red(0,0) ); |
| 107 |
} |
} |
| 108 |
else if( brat.enumPointGroup() == C2h_Z && brat.enumBravaisLattice() == BaseX ) |
else if( brat.enumLaueGroup() == C2h_Z && brat.enumBravaisLattice() == BaseX ) |
| 109 |
{ |
{ |
| 110 |
assert( inv_S_red(0,1) <= 0.0 |
assert( inv_S_red(0,1) <= 0.0 |
| 111 |
&& fabs( inv_S_red(0,1) ) * 0.9999 < inv_S_red(0,0) |
&& fabs( inv_S_red(0,1) ) * 0.9999 < inv_S_red(0,0) |
| 112 |
&& fabs( inv_S_red(0,1) ) * 1.9999 < inv_S_red(1,1) ); |
&& fabs( inv_S_red(0,1) ) * 1.9999 < inv_S_red(1,1) ); |
| 113 |
} |
} |
| 114 |
else if( brat.enumPointGroup() == C2h_X && brat.enumBravaisLattice() == BaseY ) |
else if( brat.enumLaueGroup() == C2h_X && brat.enumBravaisLattice() == BaseY ) |
| 115 |
{ |
{ |
| 116 |
assert( inv_S_red(1,2) <= 0.0 |
assert( inv_S_red(1,2) <= 0.0 |
| 117 |
&& fabs( inv_S_red(1,2) ) * 0.9999 < inv_S_red(1,1) |
&& fabs( inv_S_red(1,2) ) * 0.9999 < inv_S_red(1,1) |
| 122 |
assert( brat.enumBravaisLattice() == BaseZ ); |
assert( brat.enumBravaisLattice() == BaseZ ); |
| 123 |
assert( inv_S_red(0,0) * 0.9999 < inv_S_red(1,1) ); |
assert( inv_S_red(0,0) * 0.9999 < inv_S_red(1,1) ); |
| 124 |
} |
} |
| 125 |
else if( brat.enumPointGroup() == D2h && brat.enumBravaisLattice() == Prim ) |
else if( brat.enumLaueGroup() == D2h && brat.enumBravaisLattice() == Prim ) |
| 126 |
{ |
{ |
| 127 |
assert( inv_S_red(0,0) * 0.9999 < inv_S_red(1,1) |
assert( inv_S_red(0,0) * 0.9999 < inv_S_red(1,1) |
| 128 |
&& inv_S_red(1,1) * 0.9999 < inv_S_red(2,2) ); |
&& inv_S_red(1,1) * 0.9999 < inv_S_red(2,2) ); |
| 179 |
trans_mat = identity_matrix<Int4>(3); |
trans_mat = identity_matrix<Int4>(3); |
| 180 |
if( m_brat.enumCrystalSystem() == Monoclinic_P ) |
if( m_brat.enumCrystalSystem() == Monoclinic_P ) |
| 181 |
{ |
{ |
| 182 |
if( m_brat.enumPointGroup() == C2h_X ) |
if( m_brat.enumLaueGroup() == C2h_X ) |
| 183 |
{ |
{ |
| 184 |
putMinkowskiReducedMonoclinicP(1, 2, m_S_red, trans_mat); |
putMinkowskiReducedMonoclinicP(1, 2, m_S_red, trans_mat); |
| 185 |
} |
} |
| 186 |
else if( m_brat.enumPointGroup() == C2h_Y ) |
else if( m_brat.enumLaueGroup() == C2h_Y ) |
| 187 |
{ |
{ |
| 188 |
putMinkowskiReducedMonoclinicP(0, 2, m_S_red, trans_mat); |
putMinkowskiReducedMonoclinicP(0, 2, m_S_red, trans_mat); |
| 189 |
} |
} |
| 190 |
else //if( m_brat.enumPointGroup() == C2h_Z ) |
else //if( m_brat.enumLaueGroup() == C2h_Z ) |
| 191 |
{ |
{ |
| 192 |
putMinkowskiReducedMonoclinicP(0, 1, m_S_red, trans_mat); |
putMinkowskiReducedMonoclinicP(0, 1, m_S_red, trans_mat); |
| 193 |
} |
} |
| 197 |
m_S_red = m_S_optimized.first; |
m_S_red = m_S_optimized.first; |
| 198 |
putMinkowskiReducedMonoclinicB(m_brat, m_S_red, trans_mat); |
putMinkowskiReducedMonoclinicB(m_brat, m_S_red, trans_mat); |
| 199 |
} |
} |
| 200 |
else if( m_brat.enumPointGroup() == D2h ) |
else if( m_brat.enumLaueGroup() == D2h ) |
| 201 |
{ |
{ |
| 202 |
m_S_red = m_S_optimized.first; |
m_S_red = m_S_optimized.first; |
| 203 |
putMinkowskiReducedOrthorhombic(m_brat.enumBravaisLattice(), m_S_red, trans_mat); |
putMinkowskiReducedOrthorhombic(m_brat.enumBravaisLattice(), m_S_red, trans_mat); |
| 227 |
assert( Sval.size()==3 ); |
assert( Sval.size()==3 ); |
| 228 |
|
|
| 229 |
SymMat43_Double S_red_optimized = SymMat43_Double(Sval, NRMat<Int4>(4,3)); |
SymMat43_Double S_red_optimized = SymMat43_Double(Sval, NRMat<Int4>(4,3)); |
| 230 |
cal_average_crystal_system(brat.enumPointGroup(), S_red_optimized.first); |
cal_average_crystal_system(brat.enumLaueGroup(), S_red_optimized.first); |
| 231 |
if( brat.enumBravaisLattice() == Face ) |
if( brat.enumBravaisLattice() == Face ) |
| 232 |
{ |
{ |
| 233 |
S_red_optimized.second = m_tmat_prim_to_face; |
S_red_optimized.second = m_tmat_prim_to_face; |
| 292 |
vector<MillerIndex3> equiv_hkl_tray; |
vector<MillerIndex3> equiv_hkl_tray; |
| 293 |
VecDat3<Int4> hkl; |
VecDat3<Int4> hkl; |
| 294 |
|
|
| 295 |
PGNormalSeriesTray normal_tray(m_brat.enumPointGroup()); |
PGNormalSeriesTray normal_tray(m_brat.enumLaueGroup()); |
| 296 |
LaueGroup lg(m_brat.enumPointGroup()); |
LaueGroup lg(m_brat.enumLaueGroup()); |
| 297 |
|
|
| 298 |
for(vector<HKL_Q>::const_iterator it=upper_bound(cal_hkl_tray2.begin(), cal_hkl_tray2.end(), HKL_Q(0, 0.0)); |
for(vector<HKL_Q>::const_iterator it=upper_bound(cal_hkl_tray2.begin(), cal_hkl_tray2.end(), HKL_Q(0, 0.0)); |
| 299 |
it<cal_hkl_tray2.end(); it++) |
it<cal_hkl_tray2.end(); it++) |
| 386 |
vector< vector<QData>::const_iterator > closest_q_tray; |
vector< vector<QData>::const_iterator > closest_q_tray; |
| 387 |
associateQobsWithQcal(qdata, it_begin, it_end, closest_q_tray); |
associateQobsWithQcal(qdata, it_begin, it_end, closest_q_tray); |
| 388 |
|
|
| 389 |
const LaueGroup lg(m_brat.enumPointGroup()); |
const LaueGroup lg(m_brat.enumLaueGroup()); |
| 390 |
|
|
| 391 |
Double inv_mult = 2.0 / lg->LaueMultiplicity( product_hkl(it_begin->HKL(), m_S_optimized.second) ); |
Double inv_mult = 2.0 / lg->LaueMultiplicity( product_hkl(it_begin->HKL(), m_S_optimized.second) ); |
| 392 |
Double num_total_hkl = inv_mult; |
Double num_total_hkl = inv_mult; |
| 523 |
} |
} |
| 524 |
} |
} |
| 525 |
|
|
| 526 |
LaueGroup lg(m_brat.enumPointGroup()); |
LaueGroup lg(m_brat.enumLaueGroup()); |
| 527 |
Mat_DP_constr cmat; |
Mat_DP_constr cmat; |
| 528 |
lg->putLatticeConstantFlag(cmat); |
lg->putLatticeConstantFlag(cmat); |
| 529 |
if( data_num <= countNumberOfIndependentParam(cmat.begin(),cmat.end()) ) |
if( data_num <= countNumberOfIndependentParam(cmat.begin(),cmat.end()) ) |
| 771 |
const vector<QData> qdata = VCData::putPeakQData(); |
const vector<QData> qdata = VCData::putPeakQData(); |
| 772 |
if( qdata.empty() ) |
if( qdata.empty() ) |
| 773 |
{ |
{ |
| 774 |
if( this->enumPointGroup() == Ci ) return 6; |
if( this->enumLaueGroup() == Ci ) return 6; |
| 775 |
else if( this->enumPointGroup() == C2h_X || this->enumPointGroup() == C2h_Y || this->enumPointGroup() == C2h_Z ) return 4; |
else if( this->enumLaueGroup() == C2h_X || this->enumLaueGroup() == C2h_Y || this->enumLaueGroup() == C2h_Z ) return 4; |
| 776 |
else if( this->enumPointGroup() == D2h ) return 3; |
else if( this->enumLaueGroup() == D2h ) return 3; |
| 777 |
else if( this->enumPointGroup() == D4h_Z || this->enumPointGroup() == D31d_rho || this->enumPointGroup() == D6h ) return 2; |
else if( this->enumLaueGroup() == D4h_Z || this->enumLaueGroup() == D31d_rho || this->enumLaueGroup() == D6h ) return 2; |
| 778 |
else if( this->enumPointGroup() == Oh ) return 1; |
else if( this->enumLaueGroup() == Oh ) return 1; |
| 779 |
assert(false); |
assert(false); |
| 780 |
} |
} |
| 781 |
|
|