Garfield++ 4.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
Heed::HeedDeltaElectron Class Reference

#include <HeedDeltaElectron.h>

+ Inheritance diagram for Heed::HeedDeltaElectron:

Public Member Functions

 HeedDeltaElectron ()=default
 Default constructor.
 
 HeedDeltaElectron (manip_absvol *primvol, const point &pt, const vec &vel, vfloat ftime, long fparent_particle_number, HeedFieldMap *fieldmap, bool fs_print_listing=false)
 Constructor.
 
virtual ~HeedDeltaElectron ()
 Destructor.
 
HeedDeltaElectroncopy () const override
 Clone the particle.
 
void print (std::ostream &file, int l) const override
 Print-out.
 
- Public Member Functions inherited from Heed::eparticle
 eparticle ()=default
 Default constructor.
 
 eparticle (manip_absvol *primvol, const point &pt, const vec &vel, vfloat time, particle_def *fpardef, HeedFieldMap *fieldmap)
 Constructor using velocity vector.
 
virtual ~eparticle ()
 Destructor.
 
eparticlecopy () const override
 Clone the particle.
 
void print (std::ostream &file, int l) const override
 Print-out.
 
- Public Member Functions inherited from Heed::mparticle
 mparticle ()=default
 Default constructor.
 
 mparticle (manip_absvol *primvol, const point &pt, const vec &vel, vfloat ftime, double fmass)
 Constructor, $\gamma - 1$ calculated from the from velocity vector.
 
virtual ~mparticle ()
 Destructor.
 
double kinetic_energy () const
 Get the current kinetic energy.
 
void print (std::ostream &file, int l) const override
 Print-out.
 
mparticlecopy () const override
 Clone the particle.
 
- Public Member Functions inherited from Heed::gparticle
 gparticle ()=default
 Default constructor.
 
 gparticle (manip_absvol *primvol, const point &pt, const vec &vel, vfloat time)
 Constructor.
 
virtual ~gparticle ()
 Destructor.
 
virtual void fly (std::vector< gparticle * > &secondaries)
 Transport the particle.
 
virtual void fly (std::vector< gparticle * > &secondaries, const bool one_step)
 
void set_step_limits (const vfloat fmax_range, const vfloat frad_for_straight, const vfloat fmax_straight_arange, const vfloat fmax_circ_arange)
 Set limits/parameters for trajectory steps.
 
const vecposition () const
 Get the current position of the particle.
 
vfloat time () const
 Get the current time of the particle.
 
const vecdirection () const
 Get the current direction of the particle.
 
bool alive () const
 
virtual void print (std::ostream &file, int l) const
 Print-out.
 
virtual gparticlecopy () const
 Clone the particle.
 
- Public Member Functions inherited from Heed::particle_type
 particle_type ()=default
 
 particle_type (particle_def *f)
 
 particle_type (const char *name, int s=0)
 
int operator== (const particle_type &f)
 
int operator!= (const particle_type &f)
 
void print_notation (std::ostream &file) const
 

Public Attributes

std::vector< HeedCondElectronconduction_electrons
 
std::vector< HeedCondElectronconduction_ions
 
long parent_particle_number
 
- Public Attributes inherited from Heed::particle_type
particle_defpardef = nullptr
 

Protected Member Functions

void physics_mrange (double &fmrange) override
 
void physics_after_new_speed (std::vector< gparticle * > &secondaries) override
 Apply any other processes (turn the trajectory, kill the particle, ...).
 
- Protected Member Functions inherited from Heed::eparticle
int force (const point &pt, vec &f, vec &f_perp, vfloat &mrange) override
 Calculate force components.
 
- Protected Member Functions inherited from Heed::mparticle
void step (std::vector< gparticle * > &secondaries) override
 
void curvature (bool &curved, vec &frelcen, vfloat &fmrange, vfloat prec) override
 
virtual int force (const point &pt, vec &f, vec &f_perp, vfloat &mrange)
 
- Protected Member Functions inherited from Heed::gparticle
virtual void step (std::vector< gparticle * > &secondaries)
 
virtual void change_vol ()
 Move from one volume to another.
 
virtual void curvature (bool &curved, vec &frelcen, vfloat &fmrange, vfloat prec)
 
virtual void physics_after_new_speed (std::vector< gparticle * > &)
 Apply any other processes (turn the trajectory, kill the particle, ...).
 
virtual void physics (std::vector< gparticle * > &)
 Apply any other processes (turn the trajectory, kill the particle, ...).
 
virtual void physics_mrange (double &fmrange)
 
virtual stvpoint calc_step_to_bord ()
 Determine next position.
 
stvpoint switch_new_vol ()
 Generate next position in new volume.
 

Additional Inherited Members

- Protected Attributes inherited from Heed::eparticle
HeedFieldMapm_fieldMap = nullptr
 Pointer to field map.
 
- Protected Attributes inherited from Heed::mparticle
double m_mass = 0.
 Mass (not mass * speed_of_light^2)
 
double m_curr_ekin = 0.
 Current kinetic energy.
 
double m_orig_ekin = 0.
 Original kinetic energy.
 
double m_prev_ekin = 0.
 Previous kinetic energy.
 
double m_curr_gamma_1 = 0.
 Current $\gamma - 1$.
 
double m_orig_gamma_1 = 0.
 Original $\gamma - 1$.
 
double m_prev_gamma_1 = 0.
 Previous $\gamma - 1$.
 
- Protected Attributes inherited from Heed::gparticle
bool m_alive = false
 Status flag whether the particle is active.
 
long m_nstep = 0
 Step number.
 
long m_nzero_step = 0
 Number of previous steps with zero range (including this step).
 
stvpoint m_origin
 Original point.
 
double m_total_range_from_origin = 0.
 Range from origin to current position.
 
stvpoint m_prevpos
 Previous point.
 
stvpoint m_currpos
 Current point.
 
stvpoint m_nextpos
 Next point.
 
- Static Protected Attributes inherited from Heed::gparticle
static constexpr long m_max_qzero_step = 100
 Max. number of zero-steps allowed.
 

Detailed Description

Definition of delta-electron which can be traced through the geometry. 2003, I. Smirnov

Definition at line 15 of file HeedDeltaElectron.h.

Constructor & Destructor Documentation

◆ HeedDeltaElectron() [1/2]

Heed::HeedDeltaElectron::HeedDeltaElectron ( )
default

Default constructor.

Referenced by copy().

◆ HeedDeltaElectron() [2/2]

Heed::HeedDeltaElectron::HeedDeltaElectron ( manip_absvol primvol,
const point pt,
const vec vel,
vfloat  ftime,
long  fparent_particle_number,
HeedFieldMap fieldmap,
bool  fs_print_listing = false 
)

Constructor.

Definition at line 48 of file HeedDeltaElectron.cpp.

53 : eparticle(primvol, pt, vel, ftime, &electron_def, fieldmap),
54 parent_particle_number(fparent_particle_number),
55 m_particle_number(last_particle_number++),
56 m_print_listing(fprint_listing) {
57 mfunname("HeedDeltaElectron::HeedDeltaElectron(...)");
58}
#define mfunname(string)
Definition: FunNameStack.h:45
eparticle()=default
Default constructor.
long last_particle_number
Definition: HeedParticle.h:9
particle_def electron_def("electron", "e-", electron_mass_c2/c_squared, electron_charge, 1, 0, 0.5, spin_def(0.0, 0.0))
Definition: particle_def.h:106

◆ ~HeedDeltaElectron()

virtual Heed::HeedDeltaElectron::~HeedDeltaElectron ( )
inlinevirtual

Destructor.

Definition at line 24 of file HeedDeltaElectron.h.

24{}

Member Function Documentation

◆ copy()

HeedDeltaElectron * Heed::HeedDeltaElectron::copy ( ) const
inlineoverridevirtual

Clone the particle.

Reimplemented from Heed::gparticle.

Definition at line 26 of file HeedDeltaElectron.h.

26 {
27 return new HeedDeltaElectron(*this);
28 }
HeedDeltaElectron()=default
Default constructor.

◆ physics_after_new_speed()

void Heed::HeedDeltaElectron::physics_after_new_speed ( std::vector< gparticle * > &  )
overrideprotectedvirtual

Apply any other processes (turn the trajectory, kill the particle, ...).

Reimplemented from Heed::gparticle.

Definition at line 138 of file HeedDeltaElectron.cpp.

139 {
140 mfunname("void HeedDeltaElectron::physics_after_new_speed()");
141 if (m_print_listing) {
142 mcout << "HeedDeltaElectron::physics_after_new_speed\n";
144 }
146 if (m_currpos.prange <= 0.0) {
147 if (m_curr_ekin <= 0.0) {
148 // Get local volume.
149 absvol* av = m_currpos.volume();
150 if (av && av->s_sensitive && m_fieldMap->inside(m_currpos.ptloc)) {
151 if (m_print_listing) mcout << "Convert to conduction electron.\n";
152 conduction_electrons.emplace_back(
153 HeedCondElectron(m_currpos.ptloc, m_currpos.time));
154 }
155 m_alive = false;
156 }
157 if (m_print_listing) mcout << "exit due to currpos.prange <= 0.0\n";
158 return;
159 }
160 // Get local volume and convert it to a cross-section object.
161 const absvol* av = m_currpos.volume();
162 auto hdecs = dynamic_cast<const HeedDeltaElectronCS*>(av);
163 if (!hdecs) return;
164 double ek = m_curr_ekin / MeV;
165 if (m_print_listing) {
166 Iprintnf(mcout, ek);
167 Iprint3n(mcout, m_stop_eloss, m_phys_mrange, m_currpos.prange);
168 }
169 // Calculate dE/dx and energy loss. Update the kinetic energy.
170 double dedx;
171 double Eloss = 0.;
172 if (m_stop_eloss && m_phys_mrange == m_currpos.prange) {
173 Eloss = m_curr_ekin;
174 m_curr_ekin = 0.0;
175 dedx = Eloss / m_currpos.prange / (MeV / cm);
176 } else {
177 EnergyMesh* emesh = hdecs->hmd->energy_mesh;
178 dedx = interpolate(emesh, ek, hdecs->eLoss);
179 Eloss = std::min(m_currpos.prange * dedx * MeV / cm, m_curr_ekin);
180 m_total_eloss += Eloss;
181 m_curr_ekin -= Eloss;
182 }
183 if (m_print_listing)
184 Iprint3nf(mcout, m_prev_ekin / eV, m_curr_ekin / eV, Eloss / eV);
185 if (m_curr_ekin <= 0.0) {
186 if (m_print_listing) mcout << "m_curr_ekin <= 0.0\n";
187 m_curr_ekin = 0.0;
188 m_curr_gamma_1 = 0.0;
189 m_currpos.speed = 0.0;
190 m_alive = false;
191 } else {
192 const double resten = m_mass * c_squared;
193 m_curr_gamma_1 = m_curr_ekin / resten;
195 }
196 absvol* vav = m_currpos.volume();
197 if (vav && vav->s_sensitive) {
198 if (m_print_listing) {
199 mcout << "volume is sensitive\n";
200 Iprint2nf(mcout, Eloss / eV, m_necessary_energy / eV);
201 }
202 if (Eloss > 0.0) ionisation(Eloss, dedx, hdecs->pairprod);
203 }
204 if (m_print_listing) {
205 mcout << '\n';
207 }
208 if (!m_alive) {
209 // Done tracing the delta electron. Create the last conduction electron.
210 vav = m_currpos.volume();
211 if (vav && vav->s_sensitive && m_fieldMap->inside(m_currpos.ptloc)) {
212 if (m_print_listing) mcout << "Last conduction electron\n";
213 conduction_electrons.emplace_back(
214 HeedCondElectron(m_currpos.ptloc, m_currpos.time));
215 }
216 return;
217 }
218
219 if (m_print_listing) mcout << "\nstart to rotate by low angle\n";
220 double ek_restr = std::max(ek, 0.0005);
221 if (m_print_listing) Iprint2nf(mcout, m_currpos.prange, m_phys_mrange);
222 if (m_currpos.prange < m_phys_mrange) {
223 // recalculate scatterings
224 m_path_length = false;
225 if (s_low_mult_scattering) {
226 EnergyMesh* emesh = hdecs->hmd->energy_mesh;
227 const double low_path_length = interpolate(emesh, ek_restr, hdecs->low_lambda) * cm;
228 if (m_print_listing) Iprintnf(mcout, low_path_length / cm);
229 m_mult_low_path_length = false;
230 m_q_low_path_length = m_currpos.prange / low_path_length;
231 if (m_print_listing) Iprintnf(mcout, m_q_low_path_length);
232 }
233 }
234 if (m_print_listing) Iprintnf(mcout, m_q_low_path_length);
235#ifdef RANDOM_POIS
236 if (m_q_low_path_length > 0.0) {
237 long random_q_low_path_length = pois(m_q_low_path_length);
238 m_q_low_path_length = long(random_q_low_path_length);
239 if (m_print_listing) {
240 mcout << "After pois:\n";
241 Iprintnf(mcout, m_q_low_path_length);
242 }
243 }
244#endif
245 if (m_q_low_path_length > 0) {
246#ifdef DIRECT_LOW_IF_LITTLE
247 const long max_q_low_path_length_for_direct = 5;
248 if (m_q_low_path_length < max_q_low_path_length_for_direct) {
249 // direct modeling
250 if (m_print_listing) {
251 mcout << "direct modeling of low scatterings\n";
253 }
254 EnergyMesh* emesh = hdecs->hmd->energy_mesh;
255 const long n1r = findInterval(emesh, ek_restr);
256 for (long nscat = 0; nscat < m_q_low_path_length; ++nscat) {
257 if (m_print_listing) Iprintn(mcout, nscat);
258 double theta_rot =
259 hdecs->low_angular_points_ran[n1r].ran(SRANLUX()) * degree;
260 if (m_print_listing) Iprintnf(mcout, theta_rot);
261 vec dir = m_currpos.dir;
262 basis temp(dir, "temp");
263 vec vturn;
264 vturn.random_round_vec();
265 vturn = vturn * sin(theta_rot);
266 vec new_dir(vturn.x, vturn.y, cos(theta_rot));
267 new_dir.down(&temp);
268 m_currpos.dir = new_dir;
269 if (m_print_listing) Iprint(mcout, new_dir);
270 }
273 } else {
274#endif
275 double sigma_ctheta = hdecs->get_sigma(ek_restr, m_q_low_path_length);
276 // actually it is mean(1-cos(theta)) or
277 // sqrt( mean( square(1-cos(theta) ) ) ) depending on USE_MEAN_COEF
278
279 if (m_print_listing) Iprintnf(mcout, sigma_ctheta);
280 // Gauss (but actually exponential distribution fits better).
281 // double ctheta = 1.0 - fabs(rnorm_improved() * sigma_ctheta);
282 // Exponential:
283 double ctheta = 0.0;
284 {
285#ifdef USE_MEAN_COEF
286#else
287 double sq2 = sqrt(2.0);
288#endif
289 do {
290 double y = 0.0;
291 do { // in order to avoid SRANLUX() = 1
292 y = SRANLUX();
293 if (m_print_listing) Iprintnf(mcout, y);
294 } while (y == 1.0);
295#ifdef USE_MEAN_COEF
296 double x = sigma_ctheta * (-log(1.0 - y));
297#else
298 double x = sigma_ctheta * 1.0 / sq2 * (-log(1.0 - y));
299#endif
300 ctheta = 1.0 - x;
301 if (m_print_listing) Iprint2nf(mcout, x, ctheta);
302 } while (ctheta <= -1.0); // avoid absurd cos(theta)
303 check_econd21(ctheta, < -1.0 ||, > 1.0, mcerr);
304 }
305 if (m_print_listing) Iprintnf(mcout, ctheta);
306 double theta_rot = acos(ctheta);
307 if (m_print_listing) Iprint2nf(mcout, theta_rot, theta_rot / degree);
308 vec dir = m_currpos.dir;
309 basis temp(dir, "temp");
310 vec vturn;
311 vturn.random_round_vec();
312 vturn = vturn * sin(theta_rot);
313 vec new_dir(vturn.x, vturn.y, cos(theta_rot));
314 new_dir.down(&temp);
315 m_currpos.dir = new_dir;
318 }
319#ifdef DIRECT_LOW_IF_LITTLE
320 }
321#endif
322 if (m_path_length) {
323 if (m_print_listing) {
324 mcout << "\nstarting to rotate by large angle" << std::endl;
325 Iprintnf(mcout, m_path_length);
326 }
327 EnergyMesh* emesh = hdecs->hmd->energy_mesh;
328 const long n1r = findInterval(emesh, ek_restr);
329 double theta_rot = hdecs->angular_points_ran[n1r].ran(SRANLUX()) * degree;
330 if (m_print_listing) Iprintnf(mcout, theta_rot);
331 vec dir = m_currpos.dir;
332 basis temp(dir, "temp");
333 vec vturn;
334 vturn.random_round_vec();
335 vturn = vturn * sin(theta_rot);
336 vec new_dir(vturn.x, vturn.y, cos(theta_rot));
337 new_dir.down(&temp);
338 m_currpos.dir = new_dir;
341 }
342 if (m_print_listing) Iprint2nf(mcout, m_currpos.dir, m_currpos.dirloc);
343}
#define check_econd21(a, sign1_b1_sign0, sign2_b2, stream)
Definition: FunNameStack.h:191
#define check_econd11(a, signb, stream)
Definition: FunNameStack.h:155
std::vector< HeedCondElectron > conduction_electrons
bool inside(const point &pt)
HeedFieldMap * m_fieldMap
Pointer to field map.
Definition: eparticle.h:34
stvpoint m_currpos
Current point.
Definition: gparticle.h:264
bool m_alive
Status flag whether the particle is active.
Definition: gparticle.h:247
void up_absref(absref *f)
Definition: volume.cpp:27
double m_prev_ekin
Previous kinetic energy.
Definition: mparticle.h:77
double m_curr_ekin
Current kinetic energy.
Definition: mparticle.h:73
double m_curr_gamma_1
Current .
Definition: mparticle.h:80
double m_mass
Mass (not mass * speed_of_light^2)
Definition: mparticle.h:70
vfloat time
Definition: gparticle.h:47
absvol * volume()
Definition: gparticle.h:137
vec dirloc
Unit vector, in the local system (last system in the tree).
Definition: gparticle.h:29
vec dir
Unit vector, in the first system in the tree.
Definition: gparticle.h:25
vfloat prange
Range from previous point.
Definition: gparticle.h:46
vfloat speed
Longitudinal velocity.
Definition: gparticle.h:31
manip_absvol_treeid tid
Definition: gparticle.h:32
point ptloc
Coordinates in the local system (last system in the tree).
Definition: gparticle.h:27
DoubleAc cos(const DoubleAc &f)
Definition: DoubleAc.cpp:432
double lorbeta(const double gamma_1)
as function of .
Definition: lorgamma.cpp:23
int vecerror
Definition: vec.cpp:29
DoubleAc acos(const DoubleAc &f)
Definition: DoubleAc.cpp:490
long pois(const double amu)
Definition: pois.cpp:9
DoubleAc sin(const DoubleAc &f)
Definition: DoubleAc.cpp:384
DoubleAc sqrt(const DoubleAc &f)
Definition: DoubleAc.cpp:314
#define Iprint3nf(file, name1, name2, name3)
Definition: prstream.h:236
#define mcout
Definition: prstream.h:126
#define Iprint3n(file, name1, name2, name3)
Definition: prstream.h:232
#define Iprint(file, name)
Definition: prstream.h:197
#define mcerr
Definition: prstream.h:128
#define Iprintn(file, name)
Definition: prstream.h:204
#define Iprint2nf(file, name1, name2)
Definition: prstream.h:222
#define Iprint2n(file, name1, name2)
Definition: prstream.h:219
#define Iprintnf(file, name)
Definition: prstream.h:206

◆ physics_mrange()

void Heed::HeedDeltaElectron::physics_mrange ( double &  fmrange)
overrideprotectedvirtual

Reduce the maximal possible range due to continuous processes. Called from calc_step_to_bord after the call of curvature. but before considering the crossing with volumes. Therefore mrange may be reduced after this.

Reimplemented from Heed::gparticle.

Definition at line 60 of file HeedDeltaElectron.cpp.

60 {
61 mfunname("void HeedDeltaElectron::physics_mrange(double& fmrange)");
62 if (m_print_listing) mcout << "HeedDeltaElectron::physics_mrange\n";
63
64 m_mult_low_path_length = false;
65 m_q_low_path_length = 0.0;
66 m_path_length = false;
67 if (fmrange <= 0.0) return;
68 if (m_curr_ekin <= 0.0) {
69 fmrange = 0.0;
70 return;
71 }
72 // Get local volume and convert it to a cross-section object.
73 const absvol* av = m_currpos.volume();
74 auto hdecs = dynamic_cast<const HeedDeltaElectronCS*>(av);
75 if (!hdecs) return;
76 if (m_print_listing) Iprintnf(mcout, fmrange);
77 const double ek = m_curr_ekin / MeV;
78 // Get the dE/dx at this kinetic energy.
79 EnergyMesh* emesh = hdecs->hmd->energy_mesh;
80 const double dedx = interpolate(emesh, ek, hdecs->eLoss);
81 // Min. loss 50 eV.
82 double eloss = std::max(0.1 * ek, 0.00005);
83 if (eloss > ek) {
84 eloss = ek;
85 m_stop_eloss = true;
86 } else {
87 m_stop_eloss = false;
88 }
89 fmrange = std::min(fmrange, (eloss / dedx) * cm);
90 if (m_print_listing) Iprint2nf(mcout, fmrange, ek);
91 const double ek_restr = std::max(ek, 0.0005);
92 if (m_print_listing) Iprintnf(mcout, ek_restr / keV);
93
94 double low_path_length = 0.; // in internal units
95 if (s_low_mult_scattering) {
96 low_path_length = interpolate(emesh, ek_restr, hdecs->low_lambda) * cm;
97 if (m_print_listing) Iprintnf(mcout, low_path_length / cm);
98 long qscat = hdecs->eesls->get_qscat();
99 const double sigma_ctheta = hdecs->get_sigma(ek_restr, qscat);
100 // Reduce the number of scatterings, if the angle is too large.
101 if (sigma_ctheta > 0.3) qscat = long(qscat * 0.3 / sigma_ctheta);
102 const double mult_low_path_length = qscat * low_path_length;
103 if (m_print_listing) Iprintnf(mcout, mult_low_path_length);
104 if (fmrange > mult_low_path_length) {
105 fmrange = mult_low_path_length;
106 m_mult_low_path_length = true;
107 m_q_low_path_length = hdecs->eesls->get_qscat();
108 m_stop_eloss = false;
109 } else {
110 m_mult_low_path_length = false;
111 m_q_low_path_length = fmrange / low_path_length;
112 }
113 if (m_print_listing) Iprint2nf(mcout, fmrange, m_q_low_path_length);
114 }
115
116 if (s_high_mult_scattering) {
117 const double mean_path = interpolate(emesh, ek_restr, hdecs->lambda);
118 if (m_print_listing) Iprintnf(mcout, mean_path);
119 const double path_length = -mean_path * cm * log(1.0 - SRANLUX());
120 if (m_print_listing) Iprintnf(mcout, path_length);
121 if (fmrange > path_length) {
122 fmrange = path_length;
123 m_path_length = true;
124 m_mult_low_path_length = true;
125 if (s_low_mult_scattering) {
126 m_q_low_path_length = fmrange / low_path_length;
127 if (m_print_listing) Iprintnf(mcout, m_q_low_path_length);
128 }
129 m_stop_eloss = false;
130 } else {
131 m_path_length = false;
132 }
133 if (m_print_listing) Iprintnf(mcout, fmrange);
134 }
135 m_phys_mrange = fmrange;
136}

◆ print()

void Heed::HeedDeltaElectron::print ( std::ostream &  file,
int  l 
) const
overridevirtual

Print-out.

Reimplemented from Heed::gparticle.

Definition at line 397 of file HeedDeltaElectron.cpp.

397 {
398 if (l < 0) return;
399 Ifile << "HeedDeltaElectron (l=" << l
400 << "): particle_number=" << m_particle_number << "\n";
401 if (l == 1) return;
402 indn.n += 2;
403 Ifile << "s_low_mult_scattering=" << s_low_mult_scattering
404 << " s_high_mult_scattering=" << s_high_mult_scattering << '\n';
405 Ifile << "phys_mrange=" << m_phys_mrange << " stop_eloss=" << m_stop_eloss
406 << " mult_low_path_length=" << m_mult_low_path_length << '\n';
407 Ifile << "q_low_path_length=" << m_q_low_path_length
408 << " path_length=" << m_path_length
409 << " necessary_energy/eV=" << m_necessary_energy / eV << '\n';
410 Ifile << " parent_particle_number=" << parent_particle_number << '\n';
411
412 mparticle::print(file, l - 1);
413 indn.n -= 2;
414}
void print(std::ostream &file, int l) const override
Print-out.
Definition: mparticle.cpp:243
indentation indn
Definition: prstream.cpp:15
#define Ifile
Definition: prstream.h:195

Member Data Documentation

◆ conduction_electrons

std::vector<HeedCondElectron> Heed::HeedDeltaElectron::conduction_electrons

◆ conduction_ions

std::vector<HeedCondElectron> Heed::HeedDeltaElectron::conduction_ions

Definition at line 32 of file HeedDeltaElectron.h.

Referenced by Garfield::TrackHeed::TransportDeltaElectron().

◆ parent_particle_number

long Heed::HeedDeltaElectron::parent_particle_number

Definition at line 34 of file HeedDeltaElectron.h.

Referenced by print().


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