Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4DNASecondOrderReaction.cc
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: G4DNASecondOrderReaction.cc 65695 2012-11-27 11:39:12Z gunter $
27 //
29 #include "G4SystemOfUnits.hh"
30 #include "G4Molecule.hh"
33 #include "G4DNADamages.hh"
34 #include "G4UnitsTable.hh"
35 #include "G4ITTrackHolder.hh"
36 
37 void G4DNASecondOrderReaction::Create()
38 {
40  enableAtRestDoIt = false;
41  enableAlongStepDoIt = false;
42  enablePostStepDoIt = true;
43 
45 
47  // meaning G4DNASecondOrderReaction contains a class inheriting from G4ProcessState
48 
49  fIsInitialized = false;
51  fpMaterial = 0;
52  fReactionRate = -1.;
53  fConcentration = -1.;
55  fProposesTimeStep = true;
58 
59  verboseLevel = 0;
60 }
61 
63  G4VITProcess(aName,type),
64  InitProcessState(fpSecondOrderReactionState, fpState)
65 {
66  Create();
67 }
68 
70  G4VITProcess(rhs),
71  InitProcessState(fpSecondOrderReactionState, fpState)
72 {
73  Create();
74 }
75 
77 {
78  ;
79 }
81 {
82  if (this == &rhs) return *this; // handle self assignment
83 
84  //assignment operator
85  return *this;
86 }
87 
89 {
91  fIsInGoodMaterial = false;
92 }
93 
95 {
97  fMolarMassOfMaterial = fpMaterial->GetMassOfMolecule()*CLHEP::Avogadro*1e3;
98  fIsInitialized = true;
99 }
100 
101 void
103 {
107 }
108 
109 void
111  const G4Material* mat, double reactionRate)
112 {
113  if(fIsInitialized)
114  {
115  G4ExceptionDescription exceptionDescription ;
116  exceptionDescription << "G4DNASecondOrderReaction was already initialised. ";
117  exceptionDescription << "You cannot set a reaction after initialisation.";
118  G4Exception("G4DNASecondOrderReaction::SetReaction","G4DNASecondOrderReaction001",
119  FatalErrorInArgument,exceptionDescription);
120  }
121  fpMolecularConfiguration = molConf;
122  fpMaterial = mat;
123  fReactionRate = reactionRate;
124 }
125 
127  G4double /*previousStepSize*/,
128  G4ForceCondition* pForceCond)
129 {
130 // G4cout << "G4DNASecondOrderReaction::PostStepGetPhysicalInteractionLength" << G4endl;
131 // G4cout << "For reaction : " << fpMaterial->GetName() << " + " << fpMolecularConfiguration->GetName() << G4endl;
132 
133  //_______________________________________________________________________
134  // Check whether the track is in the good material (maybe composite material)
135  const G4Material* material = track.GetMaterial();
136 
137  G4Molecule* mol = GetMolecule(track);
138  if(!mol) return DBL_MAX;
140  {
141 // G4cout <<"mol->GetMolecularConfiguration() != fpMolecularConfiguration" << G4endl;
142  return DBL_MAX;
143  }
144 
145  G4double molDensity = (*fpMoleculeDensity)[material->GetIndex()];
146 
147  if(molDensity == 0.0) // ie : not found
148  {
150  {
153  }
154 
155 // G4cout << " Material " << fpMaterial->GetName() << " not found "
156 // <<" | name of current material : " << material->GetName()
157 // << G4endl;
158 
159  return DBL_MAX; // Becareful return here !!
160  }
161 
162 // G4cout << " Va calculer le temps d'interaction " << G4endl;
163 
165 
166 // fConcentration = molDensity/fMolarMassOfMaterial;
167  fConcentration = molDensity/CLHEP::Avogadro;
168 
169 // G4cout << "Concentration : " << fConcentration / (g/mole)<< G4endl;
170 
171  //_______________________________________________________________________
172  // Either initialize the lapse of time left
173  // meaning => the track enters for the first time in the material
174  // or substract the previous time step to the previously calculated lapse of time left
175  // meaning => the track has not left this material since the previous call
176 
177  G4double previousTimeStep(-1.);
178 
179  if(track.GetCurrentStepNumber() > 0)
181 
183 
184  if ( (previousTimeStep < 0.0) || (fpState->theNumberOfInteractionLengthLeft<=0.0)) {
185  // beggining of tracking (or just after DoIt of this process)
187  } else if ( previousTimeStep > 0.0) {
188  // subtract NumberOfInteractionLengthLeft
189  SubtractNumberOfInteractionLengthLeft(previousTimeStep );
190  } else {
191  // zero step
192  // DO NOTHING
193  }
194 
195  // condition is set to "Not Forced"
196  *pForceCond = NotForced;
197 
198  // get mean free path
200 
201  G4double value;
204  } else {
205  value = DBL_MAX;
206  }
207 #ifdef G4VERBOSE
208  if (verboseLevel>2){
209  G4cout << "G4VITRestDiscreteProcess::PostStepGetPhysicalInteractionLength ";
210  G4cout << "[ " << GetProcessName() << "]" <<G4endl;
211  track.GetDynamicParticle()->DumpInfo();
212  G4cout << " in Material " << track.GetMaterial()->GetName() <<G4endl;
213  G4cout << "InteractionLength= " << value/cm <<"[cm] " <<G4endl;
214  }
215 #endif
216 
217 // G4cout << "currentInteractionLength : " << fpState->currentInteractionLength << G4endl;
218 // G4cout << "Returned time : " << G4BestUnit(value,"Time") << G4endl;
219 
220  if(value < fReturnedValue)
222 
223  return value*-1;
224  // multiple by -1 to indicate to the tracking system that we are returning a time
225 }
226 
228 {
229  G4Molecule* molecule = GetMolecule(track);
230 #ifdef G4VERBOSE
231  if(verboseLevel > 1)
232  {
233  G4cout << "___________" << G4endl;
234  G4cout << ">>> Beginning of G4DNASecondOrderReaction verbose" << G4endl;
235  G4cout << ">>> Returned value : " << G4BestUnit(fReturnedValue,"Time") << G4endl;
236  G4cout << ">>> Time Step : " << G4BestUnit(G4ITTrackHolder::Instance()->GetTimeStep(),"Time") << G4endl;
237  G4cout << ">>> Reaction : " << molecule->GetName() << " + " << fpMaterial->GetName() << G4endl;
238  G4cout << ">>> End of G4DNASecondOrderReaction verbose <<<" << G4endl;
239  }
240 #endif
245  return &fParticleChange;
246 }
247 
const std::vector< double > * fpMoleculeDensity
static G4DNADamages * Instance()
Definition: G4DNADamages.cc:59
SecondOrderReactionState *& fpSecondOrderReactionState
G4int verboseLevel
Definition: G4VProcess.hh:368
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
const G4DynamicParticle * GetDynamicParticle() const
virtual void ResetNumberOfInteractionLengthLeft()
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
size_t GetIndex() const
Definition: G4Material.hh:260
const G4String & GetName() const
Definition: G4Material.hh:176
const G4ThreeVector & GetPosition() const
void DumpInfo(G4int mode=0) const
G4ProcessState * fpState
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
G4MolecularConfiguration * GetMolecularConfiguration() const
Definition: G4Molecule.cc:394
G4bool enableAtRestDoIt
Definition: G4VProcess.hh:350
void SetInstantiateProcessState(G4bool flag)
string material
Definition: eplot.py:19
virtual void StartTracking(G4Track *)
Definition: G4VProcess.cc:101
const G4String & GetName() const
Definition: G4Molecule.cc:243
G4GLOB_DLL std::ostream G4cout
const std::vector< double > * GetNumMolPerVolTableFor(const G4Material *) const
G4int GetCurrentStepNumber() const
virtual void StartTracking(G4Track *)
Definition: G4VITProcess.cc:83
void SetProcessSubType(G4int)
Definition: G4VProcess.hh:432
Definition: G4Step.hh:76
G4bool enablePostStepDoIt
Definition: G4VProcess.hh:352
G4double GetGlobalTime() const
G4Molecule * GetMolecule(const G4Track &track)
Definition: G4Molecule.cc:67
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
G4Material * GetMaterial() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4DNASecondOrderReaction & operator=(const G4DNASecondOrderReaction &)
G4DNASecondOrderReaction(const G4String &aName="DNASecondOrderReaction", G4ProcessType type=fDecay)
virtual void Initialize(const G4Track &)
void SetReaction(const G4MolecularConfiguration *, const G4Material *, double)
static G4DNAMolecularMaterial * Instance()
#define InitProcessState(destination, source)
Definition: G4VITProcess.hh:53
G4double GetMassOfMolecule() const
Definition: G4Material.hh:240
G4VParticleChange * pParticleChange
Definition: G4VProcess.hh:283
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
G4bool fProposesTimeStep
const XML_Char int const XML_Char * value
static G4ITTrackHolder * Instance()
#define G4endl
Definition: G4ios.hh:61
G4bool enableAlongStepDoIt
Definition: G4VProcess.hh:351
void SubtractNumberOfInteractionLengthLeft(G4double previousStepSize)
Definition: G4VProcess.hh:544
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
double G4double
Definition: G4Types.hh:76
void ProposeTrackStatus(G4TrackStatus status)
G4ForceCondition
#define DBL_MAX
Definition: templates.hh:83
virtual void AddIndirectDamage(const G4String &baseName, const G4Molecule *molecule, const G4ThreeVector &position, double time)
const G4MolecularConfiguration * fpMolecularConfiguration
G4ProcessType