Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   Related Pages  

ScatteringPower.h

00001 #ifndef _OBJCRYST_SCATTPOWER_H_
00002 #define _OBJCRYST_SCATTPOWER_H_
00003 
00004 #include "CrystVector/CrystVector.h"
00005 #include "ObjCryst/General.h"
00006 #include "RefinableObj/RefinableObj.h"
00007 
00008 
00009 //#include <stdlib.h>
00010 //#include <string>
00011 //#include <iomanip>
00012 //#include <cmath>
00013 //#include <typeinfo>
00014 //#include <fstream>
00015 //#include <ctime>
00016 
00017 namespace ObjCryst
00018 {
00019 extern const RefParType *gpRefParTypeScattPow;
00020 extern const RefParType *gpRefParTypeScattPowResonant;
00021 extern const RefParType *gpRefParTypeScattPowTemperature;
00022 extern const RefParType *gpRefParTypeScattPowTemperatureIso;
00023 extern const RefParType *gpRefParTypeScattPowTemperatureAniso;
00024 
00025 //######################################################################
00026 //
00027 //      SCATTERING POWER
00051 //######################################################################
00052 class ScatteringPower:virtual public RefinableObj
00053 {
00054    public:
00055       ScatteringPower();
00056       ScatteringPower(const ScatteringPower& old);
00057       virtual ~ScatteringPower();
00058       virtual const string GetClassName() const;
00059       virtual void operator=(const ScatteringPower& rhs);
00074       virtual CrystVector_double GetScatteringFactor(const ScatteringData &data,
00075                                                      const int spgSymPosIndex=-1) const=0;
00089       virtual CrystVector_double GetTemperatureFactor(const ScatteringData &data,
00090                                                       const int spgSymPosIndex=-1) const=0;
00106       virtual CrystMatrix_double GetResonantScattFactReal(const ScatteringData &data,
00107                                                           const int spgSymPosIndex=-1) const=0;
00123       virtual CrystMatrix_double GetResonantScattFactImag(const ScatteringData &data,
00124                                                           const int spgSymPosIndex=-1) const=0;
00126       virtual bool IsScatteringFactorAnisotropic()const;
00128       virtual bool IsTemperatureFactorAnisotropic()const;
00130       virtual bool IsResonantScatteringAnisotropic()const;
00134       virtual const string& GetSymbol() const;
00138       double GetBiso() const;
00142       double& GetBiso();
00146       virtual void SetBiso(const double newB);
00150       bool IsIsotropic()const ;
00153       long GetDynPopCorrIndex()const;
00155       long GetScatteringPowerId()const;
00157       long GetNbScatteringPower()const;
00159       const RefinableObjClock& GetLastChangeClock()const;
00161       const string& GetColourName()const;
00163       const float* GetColourRGB()const;
00165       void SetColour(const string& colorName);
00167       void SetColour(const float r,const float g,const float b);
00170       virtual double GetRadius()const=0;
00171    protected:
00172       virtual void InitRefParList()=0;
00174       virtual void Init();
00176       virtual void InitRGBColour();
00179       long mDynPopCorrIndex;
00181       double mBiso;
00183       bool mIsIsotropic;
00185       CrystVector_double mBeta;
00188       const long mScatteringPowerId;
00191       static long mNbScatteringPower;
00193       static ScatteringPower* mspScatteringPowerGlobalList[1000];
00195       static CrystVector_bool mspScatteringPowerGlobalListIsUsed;
00197       RefinableObjClock mClock;
00199       string mColourName;
00201       float mColourRGB[3];
00202    private:
00203       friend const ScatteringPower& GetScatteringPower(const long i);
00204 };
00205 
00207 extern ObjRegistry<ScatteringPower> gScatteringPowerRegistry;
00208 
00209 // Returns the ith ScatteringPower
00210 //const ScatteringPower& GetScatteringPower(const long i);
00211 
00212 //######################################################################
00213 //
00214 //      SCATTERING POWER ATOM
00218 //######################################################################
00219 
00220 class ScatteringPowerAtom:virtual public ScatteringPower
00221 {
00222    public:
00223       ScatteringPowerAtom();
00233       ScatteringPowerAtom(const string &name,const string &symbol,const double bIso=1.0);
00234       ScatteringPowerAtom(const ScatteringPowerAtom& old);
00235       ~ScatteringPowerAtom();
00236       virtual const string GetClassName() const;
00238       void Init(const string &name,const string &symbol,const double bIso=1.0);
00239       virtual CrystVector_double GetScatteringFactor(const ScatteringData &data,
00240                                                      const int spgSymPosIndex=0) const;
00241       virtual CrystVector_double GetTemperatureFactor(const ScatteringData &data,
00242                                                      const int spgSymPosIndex=0) const;
00243       virtual CrystMatrix_double GetResonantScattFactReal(const ScatteringData &data,
00244                                                      const int spgSymPosIndex=0) const;
00245       virtual CrystMatrix_double GetResonantScattFactImag(const ScatteringData &data,
00246                                                      const int spgSymPosIndex=0) const;
00248       void SetSymbol(const string &symbol) ;
00250       virtual const string& GetSymbol() const;
00256       string GetElementName() const;
00258       int GetAtomicNumber() const;
00260       double GetRadius() const;
00261       virtual void Print()const;
00262       virtual void XMLOutput(ostream &os,int indent=0)const;
00263       virtual void XMLInput(istream &is,const XMLCrystTag &tag);
00264       //virtual void XMLInputOld(istream &is,const IOCrystTag &tag);
00265    protected:
00270       void InitAtScattCoeffsWK95();
00274       void InitAtNeutronScattCoeffs();
00275       virtual void InitRefParList();
00281       string mSymbol;
00283       int mAtomicNumber;
00290       CrystVector_double mScattAi,mScattBi;
00291       double mScattC;
00298       double mNeutronScattLengthReal,mNeutronScattLengthImag;
00299       
00301       double mRadius;
00302       
00309       double mNeutronAbsCrossSection;
00310       
00311    private:
00312    #ifdef __WX__CRYST__
00313    public:
00314       virtual WXCrystObjBasic* WXCreate(wxWindow*);
00315    friend class WXScatteringPowerAtom;
00316    #endif
00317 };
00319 extern ObjRegistry<ScatteringPowerAtom> gScatteringPowerAtomRegistry;
00320 
00321 //######################################################################
00322 //
00323 //      SCATTERING COMPONENT
00328 //######################################################################
00329 struct ScatteringComponent
00330 {
00331    bool operator==(const ScatteringComponent& rhs)const;
00332    bool operator!=(const ScatteringComponent& rhs)const;
00334    void Print() const;
00336    double mX,mY,mZ,mOccupancy;
00338    const ScatteringPower *mpScattPow;
00351    mutable double mDynPopCorr;
00352    // The scatterer to which this component is associated
00353    // Scatterer *mScatterer;
00354 };
00355 
00356 //######################################################################
00357 //
00358 //      SCATTERING COMPONENT LIST
00363 //######################################################################
00364 class ScatteringComponentList
00365 {
00366    public:
00367       ScatteringComponentList();
00368       ScatteringComponentList(const long nbComponent);
00369       ScatteringComponentList(const ScatteringComponentList &old);
00370       ~ScatteringComponentList();
00373       void Reset();
00375       const ScatteringComponent& operator()(const long i) const;
00376       ScatteringComponent& operator()(const long i);
00378       long GetNbComponent() const;
00380       void operator=(const ScatteringComponentList &rhs);
00382       bool operator==(const ScatteringComponentList &rhs)const;
00384       void operator+=(const ScatteringComponentList &rhs);
00386       void operator+=(const ScatteringComponent &rhs);
00388       void operator++();
00390       void Print() const;
00393       void ChangeMaxNbComponent(const long num);
00394    protected:
00396       long mNbComponent;
00398       ScatteringComponent* mpScattComp;
00400       long mMaxNbComponent;
00401 };
00402 
00403 }//namespace
00404 #include "ObjCryst/ScatteringData.h"
00405 
00406 #endif //_OBJCRYST_SCATTPOWER_H_

Generated on Wed Nov 14 19:48:36 2001 for ObjCryst++ by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001