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 #ifndef G4DNAMolecularMaterial_HH
00029 #define G4DNAMolecularMaterial_HH
00030
00031 #include "globals.hh"
00032 #include "G4ios.hh"
00033 #include <map>
00034 #include <vector>
00035 #include "G4VStateDependent.hh"
00036
00037 class G4Material;
00038
00039 struct CompareMaterial
00040 {
00041
00042
00043 bool operator() (const G4Material* mat1, const G4Material* mat2) const;
00044 };
00045
00046 typedef std::map<const G4Material*, double,CompareMaterial> ComponentMap;
00047
00048
00049
00050 class G4DNAMolecularMaterial : public G4VStateDependent
00051 {
00052 public:
00053 static G4DNAMolecularMaterial* Instance();
00054 void DeleteInstance();
00055 void Initialize();
00056
00057 virtual G4bool Notify(G4ApplicationState requestedState) ;
00058
00059 inline const std::vector<ComponentMap>* GetMassFractionTable() const;
00060 inline const std::vector<ComponentMap>* GetDensityTable() const;
00061
00062 const std::vector<double>* GetDensityTableFor(const G4Material*) const;
00063 const std::vector<double>* GetNumMolPerVolTableFor(const G4Material*) const;
00064
00065 protected :
00066 static G4DNAMolecularMaterial* fInstance;
00067 G4DNAMolecularMaterial();
00068 G4DNAMolecularMaterial(const G4DNAMolecularMaterial& right);
00069 G4DNAMolecularMaterial& operator=(const G4DNAMolecularMaterial&);
00070 virtual ~G4DNAMolecularMaterial();
00071 void Create();
00072 void InitializeNumMolPerVol();
00073 void InitializeDensity();
00074 void RecordMolecularMaterial(G4Material* parentMaterial, G4Material* molecularMaterial, G4double fraction);
00075 void SearchMolecularMaterial(G4Material* parentMaterial, G4Material* material, double currentFraction);
00076
00077 void AddMaterial(const G4Material*, double fraction);
00078
00079 void PrintNotAMolecularMaterial(const char* methodName, const G4Material* lookForMaterial) const;
00080
00081 std::vector<ComponentMap>* fpCompFractionTable;
00082 std::vector<ComponentMap>* fpCompDensityTable;
00083 std::vector<ComponentMap>* fpCompNumMolPerVolTable;
00084
00085 mutable std::map<const G4Material*,std::vector<double>*,CompareMaterial> fAskedDensityTable;
00086 mutable std::map<const G4Material*,std::vector<double>*,CompareMaterial> fAskedNumPerVolTable;
00087 mutable std::map<const G4Material*,bool,CompareMaterial> fWarningPrinted;
00088
00089 G4bool fIsInitialized;
00090 };
00091
00092 inline const std::vector<ComponentMap> *G4DNAMolecularMaterial::GetMassFractionTable() const
00093 {
00094 return fpCompFractionTable;
00095 }
00096
00097 inline const std::vector<ComponentMap>* G4DNAMolecularMaterial::GetDensityTable() const
00098 {
00099 return fpCompDensityTable;
00100 }
00101
00102 #endif // G4DNAMolecularMaterial_HH