Develop and Download Open Source Software

Browse Subversion Repository

Diff of /Conograph/trunk/src/lattice_symmetry/LatticeFigureOfMerit.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3 by rtomiyasu, Fri Feb 22 04:51:31 2013 UTC revision 17 by rtomiyasu, Tue Apr 30 05:04:41 2013 UTC
# Line 78  static bool checkInitialLatticeParameter Line 78  static bool checkInitialLatticeParameter
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)
# Line 122  static bool checkInitialLatticeParameter Line 122  static bool checkInitialLatticeParameter
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) );
# Line 179  void LatticeFigureOfMerit::setInverseOfM Line 179  void LatticeFigureOfMerit::setInverseOfM
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                          }                          }
# Line 197  void LatticeFigureOfMerit::setInverseOfM Line 197  void LatticeFigureOfMerit::setInverseOfM
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);
# Line 227  ZErrorMessage LatticeFigureOfMerit::setL Line 227  ZErrorMessage LatticeFigureOfMerit::setL
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;
# Line 292  void LatticeFigureOfMerit::putMillerIndi Line 292  void LatticeFigureOfMerit::putMillerIndi
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++)
# Line 386  void LatticeFigureOfMerit::setFigureOfMe Line 386  void LatticeFigureOfMerit::setFigureOfMe
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;
# Line 523  pair<bool, ZErrorMessage> LatticeFigureO Line 523  pair<bool, ZErrorMessage> LatticeFigureO
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()) )
# Line 771  Int4 LatticeFigureOfMerit::checkDominant Line 771  Int4 LatticeFigureOfMerit::checkDominant
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    

Legend:
Removed from v.3  
changed lines
  Added in v.17

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26