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
G4BinaryCascade.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// -------------------------------------------------------------------
29// GEANT4 Class file
30//
31//
32// File name: G4BinaryCascade.hh
33//
34// Authors: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
35// Hans-Peter Wellisch
36// Gunter Folger
37//
38// Creation date: 8 June 2000
39//
40// -----------------------------------------------------------------------------
41
42#ifndef G4BinaryCascade_hh
43#define G4BinaryCascade_hh
44
48#include "G4ListOfCollisions.hh"
49#include "G4V3DNucleus.hh"
50#include "G4Fancy3DNucleus.hh"
51#include "G4Fragment.hh"
53#include "G4VScatterer.hh"
54#include "G4LorentzVector.hh"
55#include "G4LorentzRotation.hh"
56
57#include "G4BCDecay.hh"
58#include "G4BCLateParticle.hh"
59#include "G4BCAction.hh"
60
62
64
65class G4Track;
66class G4KineticTrack;
67class G43DNucleus;
68class G4Scatterer;
69
71{
72public:
73
75
76 virtual ~G4BinaryCascade();
77
79 G4Nucleus& theNucleus);
81 G4V3DNucleus *);
82
83 virtual void ModelDescription(std::ostream&) const;
84 virtual void PropagateModelDescription(std::ostream&) const;
85
86private:
87
88 G4BinaryCascade(const G4BinaryCascade & right);
89 const G4BinaryCascade& operator=(G4BinaryCascade & right);
90 G4int operator==(G4BinaryCascade& right) {return (this == &right);}
91 G4int operator!=(G4BinaryCascade& right) {return (this != &right);}
92
93// Implementation
94 void PrintWelcomeMessage();
95 void BuildTargetList();
96 G4bool BuildLateParticleCollisions(G4KineticTrackVector * secondaries);
97 void FindCollisions(G4KineticTrackVector *);
98 void FindDecayCollision(G4KineticTrack *);
99 void FindLateParticleCollision(G4KineticTrack *);
100
101// void PropagateInit();
102// void Cascade();
103 G4ReactionProductVector * DeExcite();
104 G4ReactionProductVector * DecayVoidNucleus();
105 G4ReactionProductVector * ProductsAddFinalState (G4ReactionProductVector * products, G4KineticTrackVector & finalState );
106 G4ReactionProductVector * ProductsAddPrecompound(G4ReactionProductVector * products ,G4ReactionProductVector * preco );
107
108 G4bool ApplyCollision(G4CollisionInitialState *);
109 G4bool Capture(G4bool verbose=false);
110 G4bool Absorb();
111 G4bool CheckPauliPrinciple(G4KineticTrackVector *);
112 G4double GetExcitationEnergy();
113 void CorrectFinalPandE();
114
115 G4double CorrectShortlivedPrimaryForFermi(
116 G4KineticTrack* primary,G4KineticTrackVector target_collection);
117 G4bool CorrectShortlivedFinalsForFermi(
118 G4KineticTrackVector * products, G4double initial_Efermi);
119
120 void UpdateTracksAndCollisions(G4KineticTrackVector * oldSecondaries,
121 G4KineticTrackVector * oldTarget,
122 G4KineticTrackVector * newSecondaries);
123 G4bool DoTimeStep(G4double timeStep);
124 G4KineticTrackVector* CorrectBarionsOnBoundary(G4KineticTrackVector *in,
126 G4Fragment * FindFragments();
127 void StepParticlesOut();
128
129 G4LorentzVector GetFinal4Momentum();
130 G4LorentzVector GetFinalNucleusMomentum();
131
133 G4V3DNucleus *);
134 G4double GetIonMass(G4int Z, G4int A);
135
136 G4int GetTotalCharge(std::vector<G4KineticTrack *> & aV)
137 {
138 G4int result = 0;
139 std::vector<G4KineticTrack *>::iterator i;
140 for(i = aV.begin(); i != aV.end(); ++i)
141 {
142 result += G4lrint((*i)->GetDefinition()->GetPDGCharge());
143 }
144 return result;
145 }
146 G4int GetTotalBaryonCharge(std::vector<G4KineticTrack *> & aV)
147 {
148 G4int result = 0;
149 std::vector<G4KineticTrack *>::iterator i;
150 for(i = aV.begin(); i != aV.end(); ++i)
151 {
152 if ( (*i)->GetDefinition()->GetBaryonNumber() != 0 ){
153 result += G4lrint((*i)->GetDefinition()->GetPDGCharge());
154 }
155 }
156 return result;
157 }
158
159 G4ReactionProductVector * HighEnergyModelFSProducts(G4ReactionProductVector *,
160 G4KineticTrackVector * secondaries); // add secondaries of string model to G4RPV
161 G4ReactionProductVector * FillVoidNucleusProducts(G4ReactionProductVector * ); // nucleus destroyed, add secondaries to G4RPV
162// utility methods
163
164 G4ThreeVector GetSpherePoint(G4double r, const G4LorentzVector & momentumdirection);
165
166 void ClearAndDestroy(G4KineticTrackVector * ktv);
167 void ClearAndDestroy(G4ReactionProductVector * rpv);
168
169// for debugging purpose
170
171 G4ReactionProductVector * ProductsAddFakeGamma(G4ReactionProductVector * products );
172
173 void PrintKTVector(G4KineticTrackVector * ktv, std::string comment=std::string(""));
174 void PrintKTVector(G4KineticTrack* kt, std::string comment=std::string(""));
175 void DebugApplyCollisionFail(G4CollisionInitialState * collision,
176 G4KineticTrackVector * products);
177 void DebugApplyCollision(G4CollisionInitialState * collision,
178 G4KineticTrackVector *products);
179 G4bool DebugEpConservation(const G4HadProjectile & aTrack, G4ReactionProductVector* products);
180 G4bool CheckChargeAndBaryonNumber(G4String where);
181
182private:
183 G4KineticTrackVector theProjectileList; // replaced by theProjectile4Momentum
184 G4KineticTrackVector theTargetList; // list of nucleons in Nucleus
185 G4KineticTrackVector theSecondaryList; // particles being followed
186 G4KineticTrackVector theCapturedList; // captured particles
187 G4KineticTrackVector theFinalState; // particles for final state
188
189
190 G4ExcitationHandler * theExcitationHandler;
191 G4CollisionManager * theCollisionMgr;
192
193 G4Scatterer * theH1Scatterer;
194
195 std::vector<G4BCAction *> theImR;
196 G4BCDecay * theDecay;
197 G4BCLateParticle * theLateParticle;
198 G4VFieldPropagation * thePropagator;
199 G4DecayKineticTracks decayKTV;
200
201 G4double theCurrentTime;
202 G4double theBCminP;
203 G4double theCutOnP;
204 G4double theCutOnPAbsorb;
205 G4LorentzVector theInitial4Mom; // suppress?
206 G4LorentzVector theProjectile4Momentum;
207 G4int currentA, currentZ, lateA, lateZ;
208 G4int initialZ, initialA,projectileA,projectileZ;
209 G4double massInNucleus, initial_nuclear_mass;
210 G4double currentInitialEnergy; // for debugging
211 G4LorentzRotation precompoundLorentzboost;
212 G4double theOuterRadius;
213 G4bool thePrimaryEscape;
214 G4ParticleDefinition * thePrimaryType;
215 G4ThreeVector theMomentumTransfer;
216
217
218
219};
220
221#endif
222
223
224
225
std::vector< G4ReactionProduct * > G4ReactionProductVector
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
virtual void PropagateModelDescription(std::ostream &) const
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &theNucleus)
virtual G4ReactionProductVector * Propagate(G4KineticTrackVector *, G4V3DNucleus *)
virtual void ModelDescription(std::ostream &) const
virtual ~G4BinaryCascade()
int G4lrint(double ad)
Definition: templates.hh:163