Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4CascadParticle Class Reference

#include <G4CascadParticle.hh>

Public Member Functions

 G4CascadParticle ()
 
 G4CascadParticle (const G4InuclElementaryParticle &particle, const G4ThreeVector &pos, G4int izone, G4double cpath, G4int gen)
 
 ~G4CascadParticle ()
 
 G4CascadParticle (const G4CascadParticle &cpart)
 
G4CascadParticleoperator= (const G4CascadParticle &cpart)
 
void fill (const G4InuclElementaryParticle &particle, const G4ThreeVector &pos, G4int izone, G4double cpath, G4int gen)
 
const G4InuclElementaryParticlegetParticle () const
 
G4InuclElementaryParticlegetParticle ()
 
G4int getGeneration () const
 
void setGeneration (G4int gen)
 
G4int getHistoryId () const
 
void setHistoryId (G4int id)
 
G4LorentzVector getMomentum () const
 
void updateParticleMomentum (const G4LorentzVector &mom)
 
const G4ThreeVectorgetPosition () const
 
void updatePosition (const G4ThreeVector &pos)
 
void incrementReflectionCounter ()
 
G4int getNumberOfReflections () const
 
void resetReflection ()
 
G4bool reflectedNow () const
 
void initializePath (G4double npath)
 
void incrementCurrentPath (G4double npath)
 
G4double getCurrentPath () const
 
void updateZone (G4int izone)
 
G4int getCurrentZone () const
 
void setMovingInsideNuclei (G4bool isMovingIn=true)
 
G4bool movingInsideNuclei () const
 
G4double getPathToTheNextZone (G4double rz_in, G4double rz_out)
 
void propagateAlongThePath (G4double path)
 
G4bool young (G4double young_path_cut, G4double cpath) const
 
void print (std::ostream &os) const
 

Detailed Description

Definition at line 50 of file G4CascadParticle.hh.

Constructor & Destructor Documentation

G4CascadParticle::G4CascadParticle ( )

Definition at line 47 of file G4CascadParticle.cc.

References G4cout, and G4endl.

48  : verboseLevel(G4CascadeParameters::verbose()),
49  current_zone(-1), current_path(-1.), movingIn(false),
50  reflectionCounter(0), reflected(false), generation(-1), historyId(-1) {
51  if (verboseLevel > 3) {
52  G4cout << " >>> G4CascadParticle::G4CascadParticle" << G4endl;
53  }
54 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
G4CascadParticle::G4CascadParticle ( const G4InuclElementaryParticle particle,
const G4ThreeVector pos,
G4int  izone,
G4double  cpath,
G4int  gen 
)

Definition at line 57 of file G4CascadParticle.cc.

References G4cout, G4endl, G4InuclParticle::getDefinition(), and G4ParticleDefinition::GetParticleName().

60  : verboseLevel(G4CascadeParameters::verbose()),
61  theParticle(particle), position(pos),
62  current_zone(izone), current_path(cpath), movingIn(true),
63  reflectionCounter(0), reflected(false), generation(gen), historyId(-1) {
64  if (verboseLevel > 3) {
65  G4cout << " >>> G4CascadParticle::G4CascadParticle "
66  << particle.getDefinition()->GetParticleName()
67  << " @ " << pos << G4endl;
68  }
69 }
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
int position
Definition: filter.cc:7
#define G4endl
Definition: G4ios.hh:61
G4ParticleDefinition * getDefinition() const
G4CascadParticle::~G4CascadParticle ( )
inline

Definition at line 60 of file G4CascadParticle.hh.

60 {;} // No subclasses allowed
G4CascadParticle::G4CascadParticle ( const G4CascadParticle cpart)
inline

Definition at line 64 of file G4CascadParticle.hh.

64 { *this = cpart; }

Member Function Documentation

void G4CascadParticle::fill ( const G4InuclElementaryParticle particle,
const G4ThreeVector pos,
G4int  izone,
G4double  cpath,
G4int  gen 
)

Definition at line 92 of file G4CascadParticle.cc.

References G4cout, and G4endl.

94  {
95  if (verboseLevel > 3) G4cout << " >>> G4CascadParticle::fill" << G4endl;
96 
97  theParticle = particle;
98  position = pos;
99  current_zone = izone;
100  current_path = cpath;
101  movingIn = true;
102  reflectionCounter = 0;
103  reflected = false;
104  generation = gen;
105  historyId = -1; // New particle, no history entry yet
106 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
G4double G4CascadParticle::getCurrentPath ( ) const
inline

Definition at line 105 of file G4CascadParticle.hh.

105 { return current_path; }
G4int G4CascadParticle::getCurrentZone ( ) const
inline
G4int G4CascadParticle::getGeneration ( ) const
inline
G4int G4CascadParticle::getHistoryId ( ) const
inline

Definition at line 80 of file G4CascadParticle.hh.

Referenced by G4CascadeHistory::AddEntry(), G4CascadeHistory::AssignHistoryID(), and G4CascadeHistory::DropEntry().

80 { return historyId; }
G4LorentzVector G4CascadParticle::getMomentum ( ) const
inline
G4int G4CascadParticle::getNumberOfReflections ( ) const
inline

Definition at line 98 of file G4CascadParticle.hh.

Referenced by G4IntraNucleiCascader::generateCascade().

98 { return reflectionCounter; }
const G4InuclElementaryParticle& G4CascadParticle::getParticle ( ) const
inline
G4InuclElementaryParticle& G4CascadParticle::getParticle ( )
inline

Definition at line 75 of file G4CascadParticle.hh.

75 { return theParticle; }
G4double G4CascadParticle::getPathToTheNextZone ( G4double  rz_in,
G4double  rz_out 
)

Definition at line 109 of file G4CascadParticle.cc.

References CLHEP::Hep3Vector::dot(), G4cout, G4endl, getMomentum(), CLHEP::Hep3Vector::mag2(), G4InuclParticleNames::pp, and CLHEP::HepLorentzVector::vect().

Referenced by G4NucleiModel::generateInteractionPartners().

110  {
111  if (verboseLevel > 3) {
112  G4cout << " >>> G4CascadParticle::getPathToTheNextZone rz_in " << rz_in
113  << " rz_out " << rz_out << G4endl;
114  }
115 
116  const G4LorentzVector& mom = getMomentum();
117 
118  G4double path = -1.0;
119  G4double rp = mom.vect().dot(position);
120  G4double rr = position.mag2();
121  G4double pp = mom.vect().mag2();
122 
123  if (std::abs(pp) < 1e-9) { // Cut-off for "at rest" is 1 eV momentum
124  if (verboseLevel > 3) G4cout << " at rest; path length is zero" << G4endl;
125  return 0.;
126  }
127 
128  G4double ra = rr - rp * rp / pp;
129  pp = std::sqrt(pp);
130  G4double ds;
131  G4double d2;
132 
133  if (verboseLevel > 3) {
134  G4cout << " current_zone " << current_zone << " rr " << rr
135  << " rp " << rp << " pp " << pp << " ra " << ra << G4endl;
136  }
137 
138  if (current_zone == 0 || rp > 0.0) {
139  d2 = rz_out * rz_out - ra;
140  if (d2 > 0.0) {
141  ds = 1.0;
142  movingIn = false;
143  } else {
144  d2 = rz_in * rz_in - ra;
145  ds = -1.0;
146  movingIn = true;
147  }
148  } else {
149  d2 = rz_in * rz_in - ra;
150  if (d2 > 0.0) {
151  ds = -1.0;
152  movingIn = true;
153  } else {
154  d2 = rz_out * rz_out - ra;
155  ds = 1.0;
156  movingIn = false;
157  }
158  }
159 
160  if (verboseLevel > 3) G4cout << " ds " << ds << " d2 " << d2 << G4endl;
161 
162  if (d2 < 0.0 && d2 > -1e-6) d2 = 0.; // Account for round-off
163 
164  if (d2 > 0.0) path = ds * std::sqrt(d2) - rp / pp; // Avoid FPE failure
165 
166  return path;
167 }
G4LorentzVector getMomentum() const
double dot(const Hep3Vector &) const
Hep3Vector vect() const
G4GLOB_DLL std::ostream G4cout
double mag2() const
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
const G4ThreeVector& G4CascadParticle::getPosition ( ) const
inline
void G4CascadParticle::incrementCurrentPath ( G4double  npath)
inline

Definition at line 104 of file G4CascadParticle.hh.

Referenced by G4NucleiModel::generateParticleFate().

104 { current_path += npath; }
void G4CascadParticle::incrementReflectionCounter ( )
inline

Definition at line 94 of file G4CascadParticle.hh.

Referenced by G4NucleiModel::boundaryTransition().

94  {
95  reflectionCounter++;
96  reflected = true;
97  }
void G4CascadParticle::initializePath ( G4double  npath)
inline

Definition at line 103 of file G4CascadParticle.hh.

Referenced by G4IntraNucleiCascader::processSecondary().

103 { current_path = npath; }
G4bool G4CascadParticle::movingInsideNuclei ( ) const
inline

Definition at line 111 of file G4CascadParticle.hh.

Referenced by G4NucleiModel::boundaryTransition().

111 { return movingIn; }
G4CascadParticle & G4CascadParticle::operator= ( const G4CascadParticle cpart)

Definition at line 73 of file G4CascadParticle.cc.

73  {
74  if (&cpart != this) { // Avoid unnecessary work
75  verboseLevel = cpart.verboseLevel;
76  theParticle = cpart.theParticle;
77  position = cpart.position;
78  current_zone = cpart.current_zone;
79  current_path = cpart.current_path;
80  movingIn = cpart.movingIn;
81  reflectionCounter = cpart.reflectionCounter;
82  reflected = cpart.reflected;
83  generation = cpart.generation;
84  historyId = cpart.historyId;
85  }
86 
87  return *this;
88 }
void G4CascadParticle::print ( std::ostream &  os) const

Definition at line 185 of file G4CascadParticle.cc.

References G4endl.

Referenced by operator<<().

185  {
186  os << " pos " << position << " zone " << current_zone
187  << " current_path " << current_path
188  << " reflectionCounter " << reflectionCounter << G4endl
189  << theParticle << G4endl;
190 }
#define G4endl
Definition: G4ios.hh:61
void G4CascadParticle::propagateAlongThePath ( G4double  path)

Definition at line 169 of file G4CascadParticle.cc.

References G4cout, G4endl, getMomentum(), CLHEP::Hep3Vector::unit(), and CLHEP::HepLorentzVector::vect().

Referenced by G4NucleiModel::generateParticleFate().

169  {
170  if (verboseLevel > 3) {
171  G4cout << " >>> G4CascadParticle::propagateAlongThePath" << G4endl;
172  }
173 
174  position += getMomentum().vect().unit()*path;
175 }
G4LorentzVector getMomentum() const
Hep3Vector vect() const
G4GLOB_DLL std::ostream G4cout
Hep3Vector unit() const
#define G4endl
Definition: G4ios.hh:61
G4bool G4CascadParticle::reflectedNow ( ) const
inline

Definition at line 101 of file G4CascadParticle.hh.

Referenced by G4NucleiModel::worthToPropagate().

101 { return reflected; }
void G4CascadParticle::resetReflection ( )
inline

Definition at line 100 of file G4CascadParticle.hh.

Referenced by G4NucleiModel::boundaryTransition().

100 { reflected = false; }
void G4CascadParticle::setGeneration ( G4int  gen)
inline

Definition at line 78 of file G4CascadParticle.hh.

Referenced by G4IntraNucleiCascader::processSecondary().

78 { generation = gen; }
void G4CascadParticle::setHistoryId ( G4int  id)
inline

Definition at line 81 of file G4CascadParticle.hh.

Referenced by G4CascadeHistory::AssignHistoryID().

81 { historyId = id; }
void G4CascadParticle::setMovingInsideNuclei ( G4bool  isMovingIn = true)
inline

Definition at line 110 of file G4CascadParticle.hh.

Referenced by G4IntraNucleiCascader::processSecondary().

110 { movingIn = isMovingIn; }
void G4CascadParticle::updateParticleMomentum ( const G4LorentzVector mom)
inline

Definition at line 87 of file G4CascadParticle.hh.

References G4InuclParticle::setMomentum().

Referenced by G4NucleiModel::boundaryTransition().

87  {
88  theParticle.setMomentum(mom);
89  }
void setMomentum(const G4LorentzVector &mom)
void G4CascadParticle::updatePosition ( const G4ThreeVector pos)
inline
void G4CascadParticle::updateZone ( G4int  izone)
inline
G4bool G4CascadParticle::young ( G4double  young_path_cut,
G4double  cpath 
) const
inline

Definition at line 116 of file G4CascadParticle.hh.

Referenced by G4NucleiModel::generateInteractionLength().

116  {
117  return ((current_path < 1000.) && (cpath < young_path_cut));
118  }

The documentation for this class was generated from the following files: