22 #ifndef _OBJCRYST_SPACEGROUP_H_
23 #define _OBJCRYST_SPACEGROUP_H_
25 #include "ObjCryst/CrystVector/CrystVector.h"
27 #include "ObjCryst/ObjCryst/General.h"
28 #include "ObjCryst/RefinableObj/RefinableObj.h"
32 namespace cctbx{
namespace sgtbx{
class space_group;}}
74 REAL mXmin,mXmax,mYmin,mYmax,mZmin,mZmax;
201 const bool noCenter=
false,
const bool noTransl=
false,
202 const bool noIdentical=
false)
const;
221 void GetSymmetric(
unsigned int i, REAL &x, REAL &y, REAL &z,
222 const bool noCenter=
false,
const bool noTransl=
false,
223 const bool derivative=
false)
const;
231 int GetNbSymmetrics(
const bool noCenter=
false,
const bool noTransl=
false)
const;
242 const cctbx::sgtbx::space_group&
GetCCTbxSpg()
const;
256 unsigned int AreReflEquiv(
const REAL h1,
const REAL k1,
const REAL l1,
257 const REAL h2,
const REAL k2,
const REAL l2)
const;
271 CrystMatrix_REAL
GetAllEquivRefl(
const REAL h,
const REAL k,
const REAL l,
272 const bool excludeFriedelMate=
false,
273 const bool forceFriedelLaw=
false,
274 const REAL sf_re=0,
const REAL sf_im=0)
const;
278 bool IsReflCentric(
const REAL h,
const REAL k,
const REAL l)
const;
The namespace which includes all objects (crystallographic and algorithmic) in ObjCryst++.
The basic description of spacegroup asymmetric unit.
void SetSpaceGroup(const SpaceGroup &spg)
Assign a SpaceGroup and generate the corrsponding Xmax, Ymax, ZMax.
AsymmetricUnit()
Default Constructor.
bool IsInAsymmetricUnit(const REAL x, const REAL y, const REAL z) const
Test if (x,y,z) is in the asymmetric unit.
The crystallographic space group, and the cell choice.
void ChangeToAsymmetricUnit(REAL x, REAL y, REAL z) const
Move (x,y,z) coordinates to their equivalent in the asym unit.
char GetExtension() const
Extension to space group symbol ('1','2':origin choice ; 'R','H'=rhomboedral/hexagonal)
bool mHasInversionCenter
Is spacegroup centrosymmetric ?
bool IsReflCentric(const REAL h, const REAL k, const REAL l) const
Is the reflection centric ?
unsigned long mSpgNumber
SpaceGroup Number.
std::vector< SMx > mvSym
Store floating-point matrices for faster use.
int GetNbSymmetrics(const bool noCenter=false, const bool noTransl=false) const
Return the number of equivalent positions in the spacegroup, ie the multilicity of the general positi...
void Print() const
Prints a description of the spacegroup (symbol, properties).
const string & GetName() const
Get the name of this spacegroup (its name, as supplied initially by the calling program or user)
void InitSpaceGroup(const string &spgId)
Init the spaceGroup object from its name.
bool IsInversionCenterAtOrigin() const
Is the center of symmetry at the origin ?
string mId
Spacegroup's name ( 'I422', 'D2^8','230') Maybe we should only store the Hermann-Mauguin symbol,...
SpaceGroup()
Default Constructor (initializes in P1)
unsigned int GetUniqueAxis() const
Which is the unique axis (for monoclinic space groups )
unsigned int GetExpectedIntensityFactor(const REAL h, const REAL k, const REAL l) const
Get the "expected intensity factor" for a given reflection.
unsigned long mNbTrans
Number of lattice translations, including (0,0,0).
bool mIsInversionCenterAtOrigin
Is center of symmetry at the origin ?
bool IsReflSystematicAbsent(const REAL h, const REAL k, const REAL l) const
Is the reflection systematically absent ?
cctbx::sgtbx::space_group * mpCCTbxSpaceGroup
SgOps structure for this spacegroup.
int GetSpaceGroupNumber() const
Id number of the spacegroup.
unsigned int AreReflEquiv(const REAL h1, const REAL k1, const REAL l1, const REAL h2, const REAL k2, const REAL l2) const
Are these reflections equivalent ?
CrystVector_REAL GetInversionCenter() const
Get the inversion center.
int GetNbTranslationVectors() const
Number of translation vectors (1 for 'P' cells, 2 for 'I', 4 for 'F',etc..)
bool IsCentrosymmetric() const
Is the crystal centrosymmetric ?
bool HasInversionCenter() const
Is centrosymmetric ?
CrystMatrix_REAL GetAllSymmetrics(const REAL x, const REAL y, const REAL z, const bool noCenter=false, const bool noTransl=false, const bool noIdentical=false) const
Get all equivalent positions of a (xyz) position.
void GetSymmetric(unsigned int i, REAL &x, REAL &y, REAL &z, const bool noCenter=false, const bool noTransl=false, const bool derivative=false) const
Get all equivalent positions of a (xyz) position.
std::vector< TRx > mvTrans
Store floating-point translation vectors for faster use.
const RefinableObjClock & GetClockSpaceGroup() const
Get the SpaceGroup Clock (corresponding to the time of the initialization of the SpaceGroup)
bool IsInAsymmetricUnit(const REAL x, const REAL y, const REAL z) const
Test if a given scatterer at (x,y,z) is in the asymmetric unit.
RefinableObjClock mClock
The Spacegroup clock.
unsigned int mUniqueAxisId
Unique axis number (0=a,1=b,2=c)
const AsymmetricUnit & GetAsymUnit() const
Get the AsymmetricUnit for this spacegroup.
const std::vector< SpaceGroup::SMx > & GetSymmetryOperations() const
Get all symmetry operations stored in vector of struct SMx.
unsigned long mNbSym
Number of symmetry operations (excluding center, and translations).
CrystMatrix_REAL GetAllEquivRefl(const REAL h, const REAL k, const REAL l, const bool excludeFriedelMate=false, const bool forceFriedelLaw=false, const REAL sf_re=0, const REAL sf_im=0) const
Get the list of all equivalent reflections.
const std::vector< SpaceGroup::TRx > & GetTranslationVectors() const
Return all Translation Vectors, as a 3 columns-array.
void ChangeSpaceGroup(const string &spgId)
Change the Spacegroup.
const cctbx::sgtbx::space_group & GetCCTbxSpg() const
Get the underlying cctbx Spacegroup object.
AsymmetricUnit mAsymmetricUnit
The spacegroup asymmetric unit.
char mExtension
Extension to space group symbol (1,2:origin choice ; R,H=rhomboedral/hexagonal)
Struct to store trans matrix.
Struct to store rot+trans matrix.
We need to record exactly when refinable objects have been modified for the last time (to avoid re-co...