17 std::cerr <<
m_className <<
"::SetClusterDensity:\n"
18 <<
" Cluster density (number of clusters per cm)"
19 <<
" must be positive.\n";
30 <<
" Stopping power (average energy loss [eV] per cm)"
31 <<
" must be positive.\n";
40 const double t0,
const double dx0,
const double dy0,
47 std::cerr <<
m_className <<
"::NewTrack: Sensor is not defined.\n";
54 std::cerr <<
m_className <<
"::NewTrack: No medium at initial position.\n";
67 const double d = sqrt(dx * dx + dy * dy + dz * dz);
72 const double scale = 1. / d;
90 medium =
m_sensor->GetMedium(x, y, z);
93 std::cout <<
m_className <<
"::NewTrack: Particle left the medium.\n";
110 int& ne,
double& ec,
double& extra) {
111 xc = yc = zc = tc = ec = extra = 0.;
Abstract base class for media.
void SetStoppingPower(const double dedx)
Set the stopping power (dE/dx).
virtual double GetClusterDensity()
virtual double GetStoppingPower()
Get the stopping power (mean energy loss [eV] per cm).
void SetClusterDensity(const double d)
Set the cluster density (inverse mean free path).
virtual bool GetCluster(double &xc, double &yc, double &zc, double &tc, int &ne, double &ec, double &extra)
TrackSimple()
Default constructor.
std::vector< Cluster > m_clusters
virtual bool NewTrack(const double x0, const double y0, const double z0, const double t0, const double dx0, const double dy0, const double dz0)
Track()=delete
Default constructor.
void RndmDirection(double &dx, double &dy, double &dz, const double length=1.)
Draw a random (isotropic) direction vector.
double RndmUniformPos()
Draw a random number uniformly distributed in the range (0, 1).