Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCLClusterUtils.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// INCL++ intra-nuclear cascade model
27// Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
28// Davide Mancusi, CEA
29// Alain Boudard, CEA
30// Sylvie Leray, CEA
31// Joseph Cugnon, University of Liege
32//
33// INCL++ revision: v5.1.8
34//
35#define INCLXX_IN_GEANT4_MODE 1
36
37#include "globals.hh"
38
39#include "G4INCLClusterUtils.hh"
40
41namespace G4INCL {
42
44 G4double E = 0.0;
45 for(ParticleIter i = pl.begin(); i != pl.end(); ++i) {
46 E += (*i)->getEnergy();
47 }
48 return E;
49 }
50
52 G4double Ekin = 0.0;
53 for(ParticleIter i = pl.begin(); i != pl.end(); ++i) {
54 Ekin += std::sqrt(std::pow((*i)->getEnergy(), 2) - std::pow((*i)->getMass(), 2));;
55 }
56 return Ekin;
57 }
58
60 G4int Z = 0;
61 for(ParticleIter i = pl.begin(); i != pl.end(); ++i) {
62 Z += (*i)->getZ();
63 }
64 return Z;
65 }
66
68 return (ClusterUtils::getZ(pl) + p->getZ());
69 }
70
72 G4int A = 0;
73 for(ParticleIter i = pl.begin(); i != pl.end(); ++i) {
74 A += (*i)->getA();
75 }
76 return A;
77 }
78
80 return (ClusterUtils::getA(pl) + p->getA());
81 }
82
84 {
85 ThreeVector pos(0.0, 0.0, 0.0);
86 G4int A = 1;
87 for(ParticleIter i = pl.begin(); i != pl.end(); ++i) {
88 pos += (pos * A)*ParticleTable::clusterPosFact[A];
89 ++A;
90 }
91 return pos;
92 }
93
95 {
97 return ((pos * pl.size()) + p->getPosition()) * ParticleTable::clusterPosFact[pl.size() + 1];
98 }
99
101 ThreeVector newPosition = oldPosition;
102 newPosition *= pl.size();
103 newPosition += p->getPosition();
104 newPosition *= ParticleTable::clusterPosFact[pl.size() + 1];
105 return newPosition;
106 }
107
109 const ThreeVector &clusterMomentum,
110 G4int clusterA,
111 Particle *p) {
112 G4double psSpace = (p->getPosition() - clusterPosition).mag2();
113 G4double psMomentum = (p->getMomentum() - clusterMomentum).mag2();
114 return psSpace * psMomentum * ParticleTable::clusterPosFact2[clusterA + p->getA()];
115 }
116
118 return true;
119 }
120}
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
static G4bool isBetterCluster(ParticleList *newCluster, ParticleList *originalCluster)
static G4double getTotalEnergy(const ParticleList &)
static G4double getKineticEnergy(const ParticleList &pl)
static G4int getA(const ParticleList &)
static G4int getZ(const ParticleList &)
static G4double getPhaseSpace(const ThreeVector &clusterPosition, const ThreeVector &clusterMomentum, G4int clusterA, Particle *p)
static ThreeVector getNewPositionVector(const ParticleList &pl, Particle *p)
static const G4double clusterPosFact2[maxClusterMass+1]
static const G4double clusterPosFact[maxClusterMass+1]
G4int getZ() const
Returns the charge number.
const G4INCL::ThreeVector & getPosition() const
const G4INCL::ThreeVector & getMomentum() const
G4int getA() const
Returns the baryon number.
std::list< G4INCL::Particle * > ParticleList
std::list< G4INCL::Particle * >::const_iterator ParticleIter