Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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//
27
28// Author: Mathieu Karamitros
29//
30// The code is developed in the framework of the ESA AO7146
31//
32// We would be very happy hearing from you, send us your feedback! :)
33//
34// In order for Geant4-DNA to be maintained and still open-source,
35// article citations are crucial.
36// If you use Geant4-DNA chemistry and you publish papers about your software,
37// in addition to the general paper on Geant4-DNA:
38//
39// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178
40//
41// we would be very happy if you could please also cite the following
42// reference papers on chemistry:
43//
44// J. Comput. Phys. 274 (2014) 841-882
45// Prog. Nucl. Sci. Tec. 2 (2011) 503-508
46
47#pragma once
48
49#include "globals.hh"
50#include "G4ThreeVector.hh"
51#include <fstream>
52#include <memory>
53#include "G4UImessenger.hh"
54#include "G4VStateDependent.hh"
55
56class G4Track;
59class G4Molecule;
65class G4ITGun;
66class G4VPhysChemIO;
67
69{
73};
74
75/**
76 * WARNING: THIS CLASS IS A PROTOTYPE
77 * G4DNAChemistryManager is called from the physics models.
78 * It creates the water molecules and the solvated electrons and
79 * and send them to G4ITStepManager to be treated in the chemistry stage.
80 * For this, the fActiveChemistry flag needs to be on.
81 * It is also possible to give already molecule's pointers already built.
82 * G4DNAChemistryManager will then be in charge of creating the track and loading
83 * it to the IT system.
84 * The user can also ask to create a file containing a information about the
85 * creation of water molecules and solvated electrons.
86 */
89{
90protected:
91 ~G4DNAChemistryManager() override;
92
93public:
94 //============================================================================
95 // STATIC METHODS
96 //============================================================================
99
100 static void DeleteInstance();
101 static G4bool IsActivated();
102
103 //============================================================================
104 // VIRTUAL METHODS
105 //============================================================================
106 // G4VStateDependent
107 G4bool Notify(G4ApplicationState requestedState) override;
108 // G4UImessenger
109 void SetNewValue(G4UIcommand*, G4String) override;
110 G4String GetCurrentValue(G4UIcommand* pCommand) override;
111
112 //============================================================================
113 // INITIALIZATION AND FINALIZATION METHODS
114 //============================================================================
117
118 /** Chemistry list is managed outside the chemistry manager (eg. constructor). */
120
121 /** Not a constructor or when used in standalone? Prefer this method. */
122 void SetChemistryList(std::unique_ptr<G4VUserChemistryList>);
123
124 // [[deprecated]] : chemistry list should never be nullptr
126
128
129 void Initialize();
130 void Run();
131 void Clear();
132
133 /**
134 * @brief Inject custom species to the simulation
135 * @details This method should be called per thread, possibly from
136 * ActionInitialisation::Build.
137 * One can decide to set the same gun for all threads.
138 * It is the user responsibility to handle the pointer deletion.
139 */
140 void SetGun(G4ITGun* pChemSpeciesGun);
141
142 void SetPhysChemIO(std::unique_ptr<G4VPhysChemIO> pPhysChemIO);
143
144 void SetVerbose(G4int verbose);
145
146 /**
147 * If the chemistry module is used in standalone (ie. without running the physics
148 * stage beforehand), the physics table still needs to be built.
149 * It is therefore necessary to flag the chemistry module as being run
150 * in standalone.
151 */
152 void UseAsStandalone(G4bool flag);
154
155 void ResetCounterWhenRunEnds(G4bool resetCounterWhenRunEnds);
156
161
162 //============================================================================
163 // FILE OPERATIONS
164 //============================================================================
165 /**
166 * Tells the chemMan to write into a file
167 * the position and electronic state of the water molecule
168 * and the position thermalized or not of the solvated electron
169 */
170 void WriteInto(const G4String&, std::ios_base::openmode mode =
171 std::ios_base::out);
173
174 /**
175 * Close the file specified with WriteInto
176 */
177 void CloseFile();
178
179 //============================================================================
180 // PUSH MOLECULES
181 //============================================================================
182 /**
183 * Method used by DNA physics model to create a water molecule.
184 * The ElectronicModification is a flag telling whether the molecule
185 * is ionized or excited, the electronic level is calculated by the
186 * model and the IncomingTrack is the track responsible for the creation
187 * of this molecule (electron, proton...).
188 */
190 G4int /*electronicLevel*/,
191 const G4Track* /*pIncomingTrack*/);
192
193 /**
194 * This method should be used by the physics model of the ElectronSolvatation
195 * process.
196 */
197 void CreateSolvatedElectron(const G4Track* /*pIncomingTrack*/,
198 G4ThreeVector* pFinalPosition = nullptr);
199
200 void PushMolecule(std::unique_ptr<G4Molecule> pMolecule,
201 G4double time,
202 const G4ThreeVector& position,
203 G4int parentID);
204
205protected:
207 void PushTrack(G4Track*);
208 void SetGlobalTemperature(G4double temperatureKelvin);
209
212 void InitializeFile();
213 void InitializeMaster();
214 void InitializeThread();
216
218
219private:
220 std::unique_ptr<G4UIdirectory> fpChemDNADirectory;
221 std::unique_ptr<G4UIcmdWithABool> fpActivateChem;
222 std::unique_ptr<G4UIcmdWithAnInteger> fpRunChem;
223 std::unique_ptr<G4UIcmdWithoutParameter> fpSkipReactionsFromChemList;
224 std::unique_ptr<G4UIcmdWithADoubleAndUnit> fpScaleForNewTemperature;
225 std::unique_ptr<G4UIcmdWithoutParameter> fpInitChem;
226
227 static G4DNAChemistryManager* fgInstance;
228 G4bool fActiveChemistry;
229
230 struct ThreadLocalData{
231 ThreadLocalData();
232 ~ThreadLocalData();
233 std::unique_ptr<G4VPhysChemIO> fpPhysChemIO;
234 G4bool fThreadInitialized = false;
235 };
236
237 static G4ThreadLocal ThreadLocalData* fpThreadData;
238
239 G4bool fMasterInitialized;
240 G4bool fForceThreadReinitialization;
241
242 std::unique_ptr<G4DNAWaterExcitationStructure> fpExcitationLevel;
243 std::unique_ptr<G4DNAWaterIonisationStructure> fpIonisationLevel;
244
245 std::unique_ptr<G4VUserChemistryList> fpUserChemistryList;
246 G4bool fOwnChemistryList;
247 G4bool fUseInStandalone;
248 G4bool fPhysicsTableBuilt;
249 G4bool fSkipReactions;
250
251 G4bool fGeometryClosed;
252
253 G4int fVerbose;
254 G4bool fResetCounterWhenRunEnds;
255};
G4ApplicationState
ElectronicModification
@ eIonizedMolecule
@ eDissociativeAttachment
@ eExcitedMolecule
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
void SetPhysChemIO(std::unique_ptr< G4VPhysChemIO > pPhysChemIO)
G4String GetCurrentValue(G4UIcommand *pCommand) override
G4bool IsCounterResetWhenRunEnds() const
void CreateSolvatedElectron(const G4Track *, G4ThreeVector *pFinalPosition=nullptr)
static G4DNAChemistryManager * GetInstanceIfExists()
static G4DNAChemistryManager * Instance()
void UseAsStandalone(G4bool flag)
void SetChemistryList(G4VUserChemistryList &)
void PushMolecule(std::unique_ptr< G4Molecule > pMolecule, G4double time, const G4ThreeVector &position, G4int parentID)
void ResetCounterWhenRunEnds(G4bool resetCounterWhenRunEnds)
void SetGlobalTemperature(G4double temperatureKelvin)
void SetGun(G4ITGun *pChemSpeciesGun)
Inject custom species to the simulation.
G4DNAWaterIonisationStructure * GetIonisationLevel()
void Deregister(G4VUserChemistryList &)
G4DNAWaterExcitationStructure * GetExcitationLevel()
void SetNewValue(G4UIcommand *, G4String) override
G4bool Notify(G4ApplicationState requestedState) override
void SetVerbose(G4int verbose)
void WriteInto(const G4String &, std::ios_base::openmode mode=std::ios_base::out)
void CreateWaterMolecule(ElectronicModification, G4int, const G4Track *)
#define G4ThreadLocal
Definition: tls.hh:77