Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4DNAChemistryManager.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id: G4DNAChemistryManager.hh 64057 2012-10-30 15:04:49Z gcosmo $
27//
28// Author: Mathieu Karamitros (kara@cenbg.in2p3.fr)
29//
30// WARNING : This class is released as a prototype.
31// It might strongly evolve or even disapear in the next releases.
32//
33// History:
34// -----------
35// 10 Oct 2011 M.Karamitros created
36//
37// -------------------------------------------------------------------
38
39#ifndef G4DNACHEMISTRYMANAGER_HH
40#define G4DNACHEMISTRYMANAGER_HH
41
42#include "globals.hh"
43#include "G4ThreeVector.hh"
44#include <fstream>
45#include <memory>
46
47class G4Track;
50class G4Molecule;
51
53{
57};
58
59/**
60 * G4DNAChemistryManager is called from the physics models.
61 * It creates the water molecules and the solvated electrons and
62 * and send them to G4ITStepManager to be treated in the chemistry stage.
63 * For this, the fActiveChemistry flag needs to be on.
64 * It is also possible to give already molecule's pointers already built.
65 * G4DNAChemistryManager will then be in charge of creating the track and loading
66 * it to the IT system.
67 * The user can also ask to create a file containing a information about the
68 * creation of water molecules and solvated electrons.
69 */
70
72{
73 friend class std::auto_ptr<G4DNAChemistryManager>;
75
76public:
78
79 /**
80 * You should rather use DeleteInstance than the destructor of this class
81 */
82 static void DeleteInstance();
83
84 /**
85 * Tells the chemMan to write into a file
86 * the position and electronic state of the water molecule
87 * and the position thermalized or not of the solvated electron
88 */
89 void WriteInto(const G4String&, std::ios_base::openmode mode = std::ios_base::out);
90
91 /** Close the file specified with WriteInto
92 */
93 void CloseFile();
95 inline void SetChemistryActivation(G4bool);
96
97 /**
98 * Method used by DNA physics model to create a water molecule.
99 * The ElectronicModification is a flag telling wheter the molecule
100 * is ionized or excited, the electronic level is calculated by the
101 * model and the IncomingTrack is the track responsible for the creation
102 * of this molecule, for instance an electron.
103 */
105 G4int /*electronicLevel*/,
106 const G4Track* /*theIncomingTrack*/);
107
108 /**
109 * On the same idea as the previous method but for solvated electron.
110 * This method should be used by the physics model of the ElectronSolvatation
111 * process.
112 */
113 void CreateSolvatedElectron(const G4Track* /*theIncomingTrack*/,
114 G4ThreeVector* finalPosition = 0);
115
116 /**
117 * WARNING : In case chemistry is not activated, PushMolecule will take care
118 * of deleting the transfered molecule.
119 * Before calling this method, it is also possible to check if the chemistry is activated
120 * through IsChemistryActived().
121 * This method will create the track corresponding to the transfered molecule and will be in charge
122 * of loading the new track to the system.
123 */
124
125 void PushMolecule(G4Molecule*& molecule,
126 double time, const G4ThreeVector& position, int parentID);
127
128 /**
129 * WARNING : In case chemistry is not activated, PushMoleculeAtParentTimeAndPlace
130 * will take care of deleting the transfered molecule.
131 * Before calling this method, it is also possible to check if the chemistry is activated
132 * through IsChemistryActived().
133 * This method will create the track corresponding to the transfered molecule and will be in charge
134 * of loading the new track to the system.
135 */
137 const G4Track* /*theIncomingTrack*/);
138protected :
141
142private:
144 static std::auto_ptr<G4DNAChemistryManager> fInstance;
145 bool fActiveChemistry;
146
147 std::ofstream fOutput;
148 G4bool fWriteFile;
149
150 G4DNAWaterExcitationStructure* fExcitationLevel;
151 G4DNAWaterIonisationStructure* fIonisationLevel;
152};
153
155{
156 return fActiveChemistry;
157}
158
160{
161 fActiveChemistry = flag;
162}
163
164#endif // G4DNACHEMISTRYMANAGER_HH
ElectronicModification
@ eIonizedMolecule
@ eDissociativeAttachment
@ eExcitedMolecule
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
void PushMolecule(G4Molecule *&molecule, double time, const G4ThreeVector &position, int parentID)
static G4DNAChemistryManager * Instance()
void CreateSolvatedElectron(const G4Track *, G4ThreeVector *finalPosition=0)
G4DNAWaterIonisationStructure * GetIonisationLevel()
G4DNAWaterExcitationStructure * GetExcitationLevel()
void PushMoleculeAtParentTimeAndPlace(G4Molecule *&molecule, const G4Track *)
void WriteInto(const G4String &, std::ios_base::openmode mode=std::ios_base::out)
void CreateWaterMolecule(ElectronicModification, G4int, const G4Track *)