QwAnalysis
|
#include <QwRayTracer.h>
Public Member Functions | |
QwRayTracer (QwOptions &options) | |
Default constructor. More... | |
virtual | ~QwRayTracer () |
Destructor. More... | |
void | ProcessOptions (QwOptions &options) |
Process command line and config file options. More... | |
bool | LoadMagneticFieldMap (QwOptions &options) |
Load the magnetic field based on config file options. More... | |
double | GetMagneticFieldCurrent () const |
Get magnetic field current. More... | |
void | SetMagneticFieldCurrent (const double current) |
Set magnetic field current. More... | |
const QwTrack * | Bridge (const QwPartialTrack *front, const QwPartialTrack *back) |
Bridge from the front to back partial track. More... | |
int | IntegrateRK (const TMatrixD &A, const TMatrixD &b, TVector3 &r, TVector3 &v, const double p, const double z, const double h, const double epsilon) |
Runge-Kutta numerical integration by Butcher tableau. More... | |
int | IntegrateRK (TVector3 &r, TVector3 &v, const double p, const double z, const int order, const double h) |
Runge-Kutta numerical integration. More... | |
![]() | |
VQwBridgingMethod () | |
Default constructor. More... | |
virtual | ~VQwBridgingMethod () |
Destructor. More... | |
Static Public Member Functions | |
static void | DefineOptions (QwOptions &options) |
Define command line and config file options. More... | |
Private Member Functions | |
double | GetOptimizationVariable (const TVector3 &position, const TVector3 &direction) const |
Optimization variable from position and direction. More... | |
Private Attributes | |
int | fIntegrationOrder |
Runge-Kutta method order. More... | |
double | fIntegrationStep |
Runge-Kutta fixed step size for order 4 or less. More... | |
double | fIntegrationMinimumStep |
Runge-Kutta minimum and maximum step size for adaptive step. More... | |
double | fIntegrationMaximumStep |
Maximum step size. More... | |
double | fIntegrationTolerance |
Allowable truncation error in adaptive step. More... | |
int | fOptimizationVariable |
Newton's method optimization variable. More... | |
double | fOptimizationResolution |
double | fMomentumStep |
Newton's method step size in momentum. More... | |
double | fInitialMomentum |
Newton's method initial momentum. More... | |
double | fStartPosition |
Starting position for magnetic field swimming. More... | |
double | fEndPosition |
Ending position for magnetic field swimming. More... | |
Double_t | fBdl |
scalar field integrals More... | |
Double_t | fBdlx |
x component of the field integral More... | |
Double_t | fBdly |
y component of the field integral More... | |
Double_t | fBdlz |
z component of the field integral More... | |
Static Private Attributes | |
static QwMagneticField * | fBfield = 0 |
Magnetic field (static) More... | |
Additional Inherited Members | |
![]() | |
virtual double | EstimateInitialMomentum (const TVector3 &direction) const |
Estimate the momentum based only on the direction. More... | |
Definition at line 43 of file QwRayTracer.h.
QwRayTracer::QwRayTracer | ( | QwOptions & | options | ) |
Default constructor.
Constructor: set all member field to zero
Definition at line 48 of file QwRayTracer.cc.
References fBdl, fBdlx, fBdly, fBdlz, LoadMagneticFieldMap(), and ProcessOptions().
|
virtual |
Destructor.
Destructor
Definition at line 66 of file QwRayTracer.cc.
References fBfield.
|
virtual |
Bridge from the front to back partial track.
Bridge the front and back partial tracks using the ray-tracing technique
front | Front partial track |
back | Back partial track |
Implements VQwBridgingMethod.
Definition at line 178 of file QwRayTracer.cc.
References QwLog::endl(), fBdl, fBdlx, fBdly, fBdlz, QwTrack::fChi, QwPartialTrack::fChi, QwTrack::fDirectionDiff, QwTrack::fDirectionPhioff, QwTrack::fDirectionThetaoff, QwTrack::fDirectionXoff, QwTrack::fDirectionYoff, QwTrack::fDirectionZoff, QwTrack::fEndDirectionActual, QwTrack::fEndDirectionActualRK4, QwTrack::fEndDirectionActualRKF45, QwTrack::fEndDirectionGoal, fEndPosition, QwTrack::fEndPositionActual, QwTrack::fEndPositionActualRK4, QwTrack::fEndPositionActualRKF45, QwTrack::fEndPositionGoal, fInitialMomentum, fIntegrationOrder, fIntegrationStep, QwTrack::fIterationsNewton, QwTrack::fIterationsRK4, QwTrack::fIterationsRKF45, QwTrack::fIterationsRungeKutta, QwTrack::fMomentum, fMomentumStep, fOptimizationResolution, QwTrack::fPositionDiff, QwTrack::fPositionPhioff, QwTrack::fPositionRoff, QwTrack::fPositionThetaoff, QwTrack::fPositionXoff, QwTrack::fPositionYoff, QwTrack::fStartDirection, QwTrack::fStartPosition, fStartPosition, QwPartialTrack::GetMomentumDirection(), VQwTrackingElement::GetOctant(), GetOptimizationVariable(), VQwTrackingElement::GetPackage(), QwPartialTrack::GetPosition(), IntegrateRK(), MAX_ITERATIONS_NEWTON, QwMessage, QwVerbose, QwTrack::SetMagneticFieldIntegral(), VQwTrackingElement::SetOctant(), and VQwTrackingElement::SetPackage().
Referenced by main(), and QwTrackingWorker::ProcessEvent().
|
static |
Define command line and config file options.
Define command line and config file options
options | options object |
Definition at line 93 of file QwRayTracer.cc.
References QwOptions::AddOptions(), and Qw::e.
Referenced by DefineOptionsTracking().
|
inline |
Get magnetic field current.
Definition at line 61 of file QwRayTracer.h.
References fBfield, and QwMagneticField::GetActualCurrent().
Referenced by QwTrackingWorker::GetMagneticFieldCurrent().
|
inlineprivate |
Optimization variable from position and direction.
Definition at line 110 of file QwRayTracer.h.
References fOptimizationVariable.
Referenced by Bridge().
int QwRayTracer::IntegrateRK | ( | const TMatrixD & | A, |
const TMatrixD & | b, | ||
TVector3 & | r, | ||
TVector3 & | v, | ||
const double | p, | ||
const double | z, | ||
const double | step, | ||
const double | tolerance | ||
) |
Runge-Kutta numerical integration by Butcher tableau.
Integrate using the Runge-Kutta algorithm
RK integration for trajectory and field integral. beta = qc/E = -0.2998 / E[GeV] [coul.(m/s)/j] = -0.2998 / E[MeV] [coul.(mm/s)/j]
The coupled differential equations are : dx/ds = vx dy/ds = vy dz/ds = vz dvx/ds = beta * (vy*bz - vz*by) dvy/ds = beta * (vz*bx - vx*bz) dvz/ds = beta * (vx*by - vy*bx) where ds is the displacement along the trajectory (= h, the integration step)
If the endpoint is at upstream and startpoint is at downstream, the electron will swim backward
Ref: https://en.wikipedia.org/wiki/Runge-Kutta_methods#Explicit_Runge.E2.80.93Kutta_methods
A | Runge-Kutta matrix |
b | Weight vector (first row is lowest order) |
r | Initial position (reference to final position) |
v | Initial momentum direction (reference to final direction) |
p | Initial momentum magnitude |
z | Final position |
step | Step size |
epsilon | Allowed truncation error per step |
Definition at line 510 of file QwRayTracer.cc.
References Qw::c, Qw::e, fBfield, fIntegrationMaximumStep, fIntegrationMinimumStep, QwMagneticField::GetCartesianFieldValue(), and MAX_ITERATIONS_RUNGEKUTTA.
Referenced by Bridge(), IntegrateRK(), and QwMatrixLookup::WriteTrajMatrix().
int QwRayTracer::IntegrateRK | ( | TVector3 & | r, |
TVector3 & | v, | ||
const double | p, | ||
const double | z, | ||
const int | order, | ||
const double | h | ||
) |
Runge-Kutta numerical integration.
Definition at line 345 of file QwRayTracer.cc.
References fIntegrationTolerance, and IntegrateRK().
bool QwRayTracer::LoadMagneticFieldMap | ( | QwOptions & | options | ) |
Load the magnetic field based on config file options.
Load the magnetic field map
options | Options object |
Definition at line 77 of file QwRayTracer.cc.
References fBfield, and QwMagneticField::TestFieldMap().
Referenced by QwRayTracer().
void QwRayTracer::ProcessOptions | ( | QwOptions & | options | ) |
Process command line and config file options.
Process command line and config file options
options | options object |
Definition at line 150 of file QwRayTracer.cc.
References Qw::cm, fEndPosition, fInitialMomentum, fIntegrationMaximumStep, fIntegrationMinimumStep, fIntegrationOrder, fIntegrationStep, fIntegrationTolerance, fMomentumStep, fOptimizationResolution, fOptimizationVariable, fStartPosition, QwOptions::GetValue(), Qw::GeV, Qw::MeV, and Qw::rad.
Referenced by QwRayTracer().
|
inline |
Set magnetic field current.
Definition at line 66 of file QwRayTracer.h.
References fBfield, and QwMagneticField::SetActualCurrent().
Referenced by QwTrackingWorker::SetMagneticFieldCurrent().
|
private |
scalar field integrals
Definition at line 135 of file QwRayTracer.h.
Referenced by Bridge(), and QwRayTracer().
|
private |
x component of the field integral
Definition at line 136 of file QwRayTracer.h.
Referenced by Bridge(), and QwRayTracer().
|
private |
y component of the field integral
Definition at line 137 of file QwRayTracer.h.
Referenced by Bridge(), and QwRayTracer().
|
private |
z component of the field integral
Definition at line 138 of file QwRayTracer.h.
Referenced by Bridge(), and QwRayTracer().
|
staticprivate |
Magnetic field (static)
Definition at line 96 of file QwRayTracer.h.
Referenced by GetMagneticFieldCurrent(), IntegrateRK(), LoadMagneticFieldMap(), SetMagneticFieldCurrent(), and ~QwRayTracer().
|
private |
Ending position for magnetic field swimming.
Definition at line 133 of file QwRayTracer.h.
Referenced by Bridge(), and ProcessOptions().
|
private |
Newton's method initial momentum.
Definition at line 128 of file QwRayTracer.h.
Referenced by Bridge(), and ProcessOptions().
|
private |
Maximum step size.
Definition at line 104 of file QwRayTracer.h.
Referenced by IntegrateRK(), and ProcessOptions().
|
private |
Runge-Kutta minimum and maximum step size for adaptive step.
Minimum step size
Definition at line 103 of file QwRayTracer.h.
Referenced by IntegrateRK(), and ProcessOptions().
|
private |
Runge-Kutta method order.
Definition at line 99 of file QwRayTracer.h.
Referenced by Bridge(), and ProcessOptions().
|
private |
Runge-Kutta fixed step size for order 4 or less.
Definition at line 101 of file QwRayTracer.h.
Referenced by Bridge(), and ProcessOptions().
|
private |
Allowable truncation error in adaptive step.
Definition at line 105 of file QwRayTracer.h.
Referenced by IntegrateRK(), and ProcessOptions().
|
private |
Newton's method step size in momentum.
Definition at line 125 of file QwRayTracer.h.
Referenced by Bridge(), and ProcessOptions().
|
private |
Newton's method optimization resolution: continue optimization until the difference between optimization variable after swimming and optimization variable of target partial track in back chamber is below this value
Definition at line 122 of file QwRayTracer.h.
Referenced by Bridge(), and ProcessOptions().
|
private |
Newton's method optimization variable.
Definition at line 108 of file QwRayTracer.h.
Referenced by GetOptimizationVariable(), and ProcessOptions().
|
private |
Starting position for magnetic field swimming.
Definition at line 131 of file QwRayTracer.h.
Referenced by Bridge(), and ProcessOptions().