4 #include "KVCoulombPropagator.h"
6 #include <KVSimNucleus.h>
13 void KVCoulombPropagator::updateEvent()
15 for (
int i = 1; i <= fMult; ++i) {
17 y[particle_position_offset(i)],
18 y[particle_position_offset(i) + 1],
19 y[particle_position_offset(i) + 2]
37 :
KVRungeKutta(
e->GetMult() * 6, precision), theEvent(
e), fMult(
e->GetMult())
44 for (
int i = 1; i <= fMult; ++i) {
45 for (
int j = 0; j < 3; ++j) {
46 y[particle_position_offset(i) + j] =
static_cast<KVSimNucleus*
>(
e->GetParticle(i))->GetPosition()[j];
70 for (
int i = 1; i <= fMult; ++i) {
71 for (
int j = 0; j < 3; ++j) {
72 DYDX[particle_position_offset(i) + j] = Y[particle_velocity_offset(i) + j];
73 DYDX[particle_velocity_offset(i) + j] = 0;
76 for (
int i = 1; i < fMult; ++i) {
79 for (
int j = i + 1; j <= fMult; ++j) {
81 TVector3 Rij(Y[particle_position_offset(i)] - Y[particle_position_offset(j)],
82 Y[particle_position_offset(i) + 1] - Y[particle_position_offset(j) + 1],
83 Y[particle_position_offset(i) + 2] - Y[particle_position_offset(j) + 2]);
90 for (
int k = 0; k < 3; ++k) {
91 DYDX[particle_velocity_offset(i) + k] += Fij[k] / mi;
92 DYDX[particle_velocity_offset(j) + k] -= Fij[k] / mj;
105 for (
int i = 1; i < fMult; ++i) {
108 for (
int j = i + 1; j <= fMult; ++j) {
Perform Coulomb propagation of events.
virtual ~KVCoulombPropagator()
Destructor.
void Propagate(int maxTime)
KVCoulombPropagator(KVSimEvent *, Double_t precision=1.e-9)
Double_t TotalPotentialEnergy() const
void CalcDerivs(Double_t, Double_t *Y, Double_t *DYDX) override
static Double_t e2
e^2/(4.pi.epsilon_0) in MeV.fm
Int_t GetZ() const
Return the number of proton / atomic number.
Adaptive step-size 4th order Runge-Kutta ODE integrator from Numerical Recipes.
virtual void Integrate(Double_t *ystart, Double_t x1, Double_t x2, Double_t h1)
Container class for simulated nuclei, KVSimNucleus.
Nucleus in a simulated event.
const TVector3 * GetPosition() const
Particle * GetParticle(Int_t npart) const