00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef _G4GDMLREADDEFINE_INCLUDED_
00038 #define _G4GDMLREADDEFINE_INCLUDED_
00039
00040 #include <map>
00041
00042 #include "G4ThreeVector.hh"
00043 #include "G4RotationMatrix.hh"
00044
00045 #include "G4GDMLRead.hh"
00046
00047 class G4GDMLMatrix
00048 {
00049
00050 public:
00051
00052 G4GDMLMatrix();
00053 G4GDMLMatrix(size_t rows0,size_t cols0);
00054 G4GDMLMatrix(const G4GDMLMatrix& rhs);
00055 G4GDMLMatrix& operator=(const G4GDMLMatrix& rhs);
00056 ~G4GDMLMatrix();
00057
00058 void Set(size_t r,size_t c,G4double a);
00059 G4double Get(size_t r,size_t c) const;
00060 size_t GetRows() const;
00061 size_t GetCols() const;
00062
00063 private:
00064
00065 G4double *m;
00066 size_t rows,cols;
00067 };
00068
00069 class G4GDMLReadDefine : public G4GDMLRead
00070 {
00071
00072 public:
00073
00074 G4bool IsValidID(const G4String&) const;
00075 G4double GetConstant(const G4String&);
00076 G4double GetVariable(const G4String&);
00077 G4double GetQuantity(const G4String&);
00078 G4ThreeVector GetPosition(const G4String&);
00079 G4ThreeVector GetRotation(const G4String&);
00080 G4ThreeVector GetScale(const G4String&);
00081 G4GDMLMatrix GetMatrix(const G4String&);
00082
00083 virtual void DefineRead(const xercesc::DOMElement* const);
00084
00085 protected:
00086
00087 G4GDMLReadDefine();
00088 virtual ~G4GDMLReadDefine();
00089
00090 G4RotationMatrix GetRotationMatrix(const G4ThreeVector&);
00091 void VectorRead(const xercesc::DOMElement* const,G4ThreeVector&);
00092 G4String RefRead(const xercesc::DOMElement* const);
00093
00094 void ConstantRead(const xercesc::DOMElement* const);
00095 void MatrixRead(const xercesc::DOMElement* const);
00096 void PositionRead(const xercesc::DOMElement* const);
00097 void RotationRead(const xercesc::DOMElement* const);
00098 void ScaleRead(const xercesc::DOMElement* const);
00099 void VariableRead(const xercesc::DOMElement* const);
00100 void QuantityRead(const xercesc::DOMElement* const);
00101 void ExpressionRead(const xercesc::DOMElement* const);
00102
00103 protected:
00104
00105 std::map<G4String,G4double> quantityMap;
00106 std::map<G4String,G4ThreeVector> positionMap;
00107 std::map<G4String,G4ThreeVector> rotationMap;
00108 std::map<G4String,G4ThreeVector> scaleMap;
00109 std::map<G4String,G4GDMLMatrix> matrixMap;
00110 };
00111
00112 #endif