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
00038
00039 #ifndef G4DNACHEMISTRYMANAGER_HH
00040 #define G4DNACHEMISTRYMANAGER_HH
00041
00042 #include "globals.hh"
00043 #include "G4ThreeVector.hh"
00044 #include <fstream>
00045 #include <memory>
00046
00047 class G4Track;
00048 class G4DNAWaterExcitationStructure;
00049 class G4DNAWaterIonisationStructure;
00050 class G4Molecule;
00051
00052 enum ElectronicModification
00053 {
00054 eIonizedMolecule,
00055 eExcitedMolecule,
00056 eDissociativeAttachment
00057 };
00058
00071 class G4DNAChemistryManager
00072 {
00073 friend class std::auto_ptr<G4DNAChemistryManager>;
00074 ~G4DNAChemistryManager();
00075
00076 public:
00077 static G4DNAChemistryManager* Instance();
00078
00082 static void DeleteInstance();
00083
00089 void WriteInto(const G4String&, std::ios_base::openmode mode = std::ios_base::out);
00090
00093 void CloseFile();
00094 inline G4bool IsChemistryActived();
00095 inline void SetChemistryActivation(G4bool);
00096
00104 void CreateWaterMolecule(ElectronicModification,
00105 G4int ,
00106 const G4Track* );
00107
00113 void CreateSolvatedElectron(const G4Track* ,
00114 G4ThreeVector* finalPosition = 0);
00115
00125 void PushMolecule(G4Molecule*& molecule,
00126 double time, const G4ThreeVector& position, int parentID);
00127
00136 void PushMoleculeAtParentTimeAndPlace(G4Molecule*& molecule,
00137 const G4Track* );
00138 protected :
00139 G4DNAWaterExcitationStructure* GetExcitationLevel();
00140 G4DNAWaterIonisationStructure* GetIonisationLevel();
00141
00142 private:
00143 G4DNAChemistryManager();
00144 static std::auto_ptr<G4DNAChemistryManager> fInstance;
00145 bool fActiveChemistry;
00146
00147 std::ofstream fOutput;
00148 G4bool fWriteFile;
00149
00150 G4DNAWaterExcitationStructure* fExcitationLevel;
00151 G4DNAWaterIonisationStructure* fIonisationLevel;
00152 };
00153
00154 inline G4bool G4DNAChemistryManager::IsChemistryActived()
00155 {
00156 return fActiveChemistry;
00157 }
00158
00159 inline void G4DNAChemistryManager::SetChemistryActivation(G4bool flag)
00160 {
00161 fActiveChemistry = flag;
00162 }
00163
00164 #endif // G4DNACHEMISTRYMANAGER_HH