Garfield++ v1r0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
HeedDeltaElectron.cpp
Go to the documentation of this file.
9
10/*
112003, I. Smirnov
12*/
13
14#define USE_ADJUSTED_W
15#define RANDOM_POIS
16#define DIRECT_LOW_IF_LITTLE
17
18namespace Heed {
19
21
24
26 const vec& vel, vfloat time,
27 long fparent_particle_number,
28 //PassivePtr< gparticle > fparent_part
29 int fs_print_listing)
30 : eparticle(primvol, pt, vel, time, &electron_def),
31 //parent_part(fparent_part),
32 s_print_listing(fs_print_listing),
33 phys_mrange(0.0),
34 s_stop_eloss(0),
35 s_mult_low_path_length(0),
36 q_low_path_length(0.0),
37 s_path_length(0),
38 necessary_energy(0.0),
39 parent_particle_number(fparent_particle_number) {
40 mfunname("HeedDeltaElectron::HeedDeltaElectron(...)");
43 //if(particle_number == 247) // for debug of particular event
44 //s_print_listing = 1;
45 //set_count_references();
46
47}
48
49void HeedDeltaElectron::physics_mrange(double& fmrange) {
50 mfunname("void HeedDeltaElectron::physics_mrange(double& fmrange)");
51 if (s_print_listing == 1) {
52 mcout << "void HeedDeltaElectron::physics_mrange(double& fmrange)"
53 << std::endl;
54 }
57 s_path_length = 0;
58 if (fmrange <= 0.0) return;
59 if (curr_kin_energy == 0.0) {
60 fmrange = 0.0;
61 return;
62 }
63 const absvol* av = currpos.G_lavol(); // get least address of volume
64 const HeedDeltaElectronCSType* hmecst =
65 dynamic_cast<const HeedDeltaElectronCSType*>(av);
66 if (hmecst == NULL) return;
67 if (s_print_listing == 1) Iprintnf(mcout, fmrange);
68 // calculate eloss and mrange as follows from eloss
69 HeedDeltaElectronCS* hdecs = hmecst->hdecs.getver();
70 double ek = curr_kin_energy / MeV;
71 EnergyMesh* emesh = hdecs->hmd->energy_mesh.get();
72 long n1 = emesh->get_interval_number_between_centers(ek);
73 long qener = emesh->get_q();
74 if (n1 < 0) n1 = 0;
75 if (n1 > qener - 2) n1 = qener - 2;
76 long n2 = n1 + 1;
77 double dedx = hdecs->eLoss[n1] + (hdecs->eLoss[n2] - hdecs->eLoss[n1]) /
78 (emesh->get_ec(n2) - emesh->get_ec(n1)) *
79 (ek - emesh->get_ec(n1));
80 //double ek_reduced = ek * 0.9;
81 double eloss = 0.1 * ek; // MeV
82 if (eloss < 0.00005) eloss = 0.00005; // loss by 50eV
83 if (eloss > ek) {
84 eloss = ek;
85 s_stop_eloss = 1;
86 } else {
87 s_stop_eloss = 0;
88 }
89 double mrange = (eloss / dedx) * cm;
90 if (fmrange > mrange) fmrange = mrange;
91 if (s_print_listing == 1) {
92 Iprintnf(mcout, fmrange);
93 Iprintnf(mcout, ek);
94 }
95 double ek_restricted = ek;
96 if (ek_restricted < 0.0005) ek_restricted = 0.0005;
97 if (s_print_listing == 1) Iprintnf(mcout, ek_restricted / keV);
98
99 long n1r = emesh->get_interval_number_between_centers(ek_restricted);
100 if (n1r < 0) n1r = 0;
101 if (n1r > qener - 2) n1r = qener - 2;
102 long n2r = n1r + 1;
103 double low_path_length = 0.; // in internal units
104 if (s_low_mult_scattering == 1) {
105 low_path_length = (hdecs->low_lambda[n1r] +
106 (hdecs->low_lambda[n2r] - hdecs->low_lambda[n1r]) /
107 (emesh->get_ec(n2r) - emesh->get_ec(n1r)) *
108 (ek_restricted - emesh->get_ec(n1r))) * cm;
109 if (s_print_listing == 1) Iprintnf(mcout, low_path_length / cm);
110 long qscat = hdecs->eesls->get_qscat();
111 double sigma_ctheta = hdecs->get_sigma(ek_restricted, qscat);
112 // Reduce the number of scatterings, if the angle is too large.
113 if (sigma_ctheta > 0.3) qscat = long(qscat * 0.3 / sigma_ctheta);
114 double mult_low_path_length = qscat * low_path_length;
115 if (s_print_listing == 1) Iprintnf(mcout, mult_low_path_length);
116 if (fmrange > mult_low_path_length) {
117 fmrange = mult_low_path_length;
119 q_low_path_length = hdecs->eesls->get_qscat();
120 s_stop_eloss = 0;
121 } else {
123 q_low_path_length = fmrange / low_path_length;
124 }
125 if (s_print_listing == 1) {
126 Iprintnf(mcout, fmrange);
128 }
129 }
130
131 if (s_high_mult_scattering == 1) {
132 if (s_print_listing == 1) {
134 Iprintnf(mcout, n1r);
135 Iprintnf(mcout, n2r);
136 Iprintnf(mcout, ek_restricted);
137 Iprintnf(mcout, emesh->get_ec(n1r));
138 Iprintnf(mcout, emesh->get_ec(n2r));
139 }
140 double mean_path_length =
141 (hdecs->lambda[n1r] + (hdecs->lambda[n2r] - hdecs->lambda[n1r]) /
142 (emesh->get_ec(n2r) - emesh->get_ec(n1r)) *
143 (ek_restricted - emesh->get_ec(n1r))) * cm;
144 if (s_print_listing == 1) {
145 Iprintnf(mcout, mean_path_length);
146 Iprintnf(mcout, mean_path_length / cm);
147 }
148 double path_length = -mean_path_length * log(1.0 - SRANLUX());
149 if (s_print_listing == 1) Iprintnf(mcout, path_length);
150 if (fmrange > path_length) {
151 fmrange = path_length;
152 s_path_length = 1;
154 if (s_low_mult_scattering == 1) {
155 q_low_path_length = fmrange / low_path_length;
157 }
158 s_stop_eloss = 0;
159 } else {
160 s_path_length = 0;
161 }
162 if (s_print_listing == 1) Iprintnf(mcout, fmrange);
163 }
164 phys_mrange = fmrange;
165}
166
168 mfunname("void HeedDeltaElectron::physics_after_new_speed(void)");
169 if (s_print_listing == 1) {
170 mcout << "HeedDeltaElectron::physics_after_new_speed is started\n";
172 }
174 if (currpos.prange <= 0.0) {
175 if (curr_kin_energy == 0.0) {
176 // Get least address of volume.
177 absvol* av = currpos.G_lavol();
178 SensitiveVolume* asv = dynamic_cast<SensitiveVolume*>(av);
179 if (asv != NULL) {
180 if (s_print_listing == 1) {
181 mcout << "HeedDeltaElectron::physics_after_new_speed: \n";
182 mcout << "This is converted to conduction\n";
183 }
185 //HeedCondElectron hce(currpos.pt, currpos.ptloc, currpos.tid, this);
186 asv->conduction_electron_bank.append(hce);
187 //conduction_electron_bank.insert_after
188 //( conduction_electron_bank.get_last_node(), hce);
189 }
190 s_life = 0;
191 }
192 if (s_print_listing == 1) mcout << "exit due to currpos.prange <= 0.0\n";
193 return;
194 }
195 // Get least address of volume
196 const absvol* av = currpos.G_lavol();
197 const HeedDeltaElectronCSType* hmecst =
198 dynamic_cast<const HeedDeltaElectronCSType*>(av);
199 if (s_print_listing == 1)
200 mcout << "physics_after_new_speed: started" << std::endl;
201 if (hmecst == NULL) return;
202 HeedDeltaElectronCS* hdecs = hmecst->hdecs.get();
203 double ek = curr_kin_energy / MeV;
204 EnergyMesh* emesh = hdecs->hmd->energy_mesh.get();
205 long n1 = emesh->get_interval_number_between_centers(ek);
206 long qener = emesh->get_q();
207 if (n1 < 0) n1 = 0;
208 if (n1 > qener - 2) n1 = qener - 2;
209 long n2 = n1 + 1;
210 if (s_print_listing == 1) {
211 Iprintnf(mcout, ek);
212 Iprint2n(mcout, n1, n2);
214 }
215 /*
216 double dedx = hdecs->eLoss[n1] +
217 (hdecs->eLoss[n2] - hdecs->eLoss[n1])/
218 (emesh->get_ec(n2) - emesh->get_ec(n1)) *
219 (ek - emesh->get_ec(n1));
220 double Eloss = dedx * MeV/cm;
221 Eloss *= currpos.prange;
222 if(s_print_listing == 1) Iprintn(mcout, Eloss/eV);
223 total_Eloss += Eloss;
224 curr_kin_energy -= Eloss;
225 */
226 double dedx;
227 double Eloss;
228 if (s_stop_eloss == 1 && phys_mrange == currpos.prange) {
229 Eloss = curr_kin_energy;
230 curr_kin_energy = 0.0;
231 dedx = Eloss / currpos.prange / (MeV / cm);
232 } else {
233 dedx = hdecs->eLoss[n1] + (hdecs->eLoss[n2] - hdecs->eLoss[n1]) /
234 (emesh->get_ec(n2) - emesh->get_ec(n1)) *
235 (ek - emesh->get_ec(n1));
236 Eloss = dedx * MeV / cm;
237 Eloss *= currpos.prange;
238 total_Eloss += Eloss;
239 curr_kin_energy -= Eloss;
240 }
241 if (s_print_listing == 1)
242 Iprint3nf(mcout, prev_kin_energy / eV, curr_kin_energy / eV, Eloss / eV);
243 if (curr_kin_energy <= 0.0) {
244 if (s_print_listing == 1) {
245 mcout << "curr_kin_energy <= 0.0, curr_kin_energy=" << curr_kin_energy
246 << " curr_kin_energy/MeV=" << curr_kin_energy / MeV << '\n';
247 }
248 curr_kin_energy = 0.0;
249 curr_gamma_1 = 0.0;
250 currpos.speed = 0.0;
251 s_life = 0;
252 } else {
253 double resten = mass * c_squared;
254 curr_gamma_1 = curr_kin_energy / resten;
255 currpos.speed = c_light * lorbeta(curr_gamma_1);
256 }
257 absvol* vav = currpos.G_lavol();
258 SensitiveVolume* asv = dynamic_cast<SensitiveVolume*>(vav);
259 if (asv != NULL) {
260 if (s_print_listing == 1) {
261 mcout << "volume is sensitive\n";
262 Iprintnf(mcout, Eloss / eV);
264 }
265 if (Eloss > 0.0) {
266 if (Eloss >= necessary_energy) {
267 // can leave electrons
268 // there is no need to recalculate mean energy loss per 1 cm,
269 // since necessary_energy is not an addition
270 if (s_print_listing == 1) {
271 mcout << "\nstart to leave conduction electrons" << std::endl;
272 //Iprintnf(mcout, Eloss/eV);
273 //Iprintnf(mcout, necessary_energy/eV);
274 Iprintnf(mcout, dedx);
275 }
276 if (necessary_energy <= 0.0) {
277#ifdef USE_ADJUSTED_W
279 hdecs->pairprod->get_eloss(prev_kin_energy / eV) * eV;
280#else
281 necessary_energy = hdecs->pairprod->get_eloss() * eV;
282#endif
283 }
285 double Eloss_left = Eloss;
286 point curpt = prevpos.pt;
287 vec dir = prevpos.dir; // this approximation ignores curvature
288 double curr_kin_energy_for_cond = prev_kin_energy;
289 if (s_print_listing == 1) Iprintnf(mcout, curpt);
290 // then at each step necessary_energy is energy due to expend till
291 // next conduction electron
292 while (Eloss_left >= necessary_energy) {
293 // this condition provides
294 // also that the current electron energy is non negative
295 double step_length = necessary_energy / (dedx * MeV / cm);
296 if (s_print_listing == 1) Iprintnf(mcout, step_length);
297 curpt = curpt + dir * step_length;
298 if (s_print_listing == 1) Iprintf(mcout, curpt);
299 point ptloc = curpt;
300 prevpos.tid.up_absref(&ptloc);
301 if (s_print_listing == 1) mcout << "New conduction electron\n";
302 HeedCondElectron hce(ptloc, currpos.time);
303 //HeedCondElectron hce(curpt, ptloc, prevpos.tid, this);
304 asv->conduction_electron_bank.append(hce);
305 //conduction_electron_bank.insert_after
306 // ( conduction_electron_bank.get_last_node(), hce);
307 Eloss_left -= necessary_energy;
308 curr_kin_energy_for_cond -= necessary_energy;
309// generate next random energy
310#ifdef USE_ADJUSTED_W
312 eV * hdecs->pairprod->get_eloss(curr_kin_energy_for_cond / eV);
313#else
314 necessary_energy = hdecs->pairprod->get_eloss() * eV;
315#endif
316 if (s_print_listing == 1) {
317 Iprintnf(mcout, Eloss_left / eV);
318 Iprint2nf(mcout, curr_kin_energy_for_cond / eV,
319 necessary_energy / eV);
320 }
321 }
322 necessary_energy -= Eloss_left;
324 } else {
325 necessary_energy -= Eloss;
326 }
327 }
328 }
329 if (s_print_listing == 1) {
330 mcout << '\n';
332 }
333 if (s_life == 1) {
334 if (s_print_listing == 1) mcout << "\nstart to rotate by low angle\n";
335 double ek_restricted = ek;
336 if (ek_restricted < 0.0005) ek_restricted = 0.0005;
337 if (s_print_listing == 1) {
340 }
341 if (currpos.prange < phys_mrange) {
342 // recalculate scatterings
343 s_path_length = 0;
344 if (s_low_mult_scattering == 1) {
345 long n1r = emesh->get_interval_number_between_centers(ek_restricted);
346 if (n1r < 0) n1r = 0;
347 if (n1r > qener - 2) n1r = qener - 2;
348 long n2r = n1r + 1;
349 double low_path_length; // in internal units
350 if (s_low_mult_scattering == 1) {
351 low_path_length = (hdecs->low_lambda[n1r] +
352 (hdecs->low_lambda[n2r] - hdecs->low_lambda[n1r]) /
353 (emesh->get_ec(n2r) - emesh->get_ec(n1r)) *
354 (ek_restricted - emesh->get_ec(n1r))) * cm;
355 if (s_print_listing == 1) Iprintnf(mcout, low_path_length / cm);
357 q_low_path_length = currpos.prange / low_path_length;
359 }
360 }
361 }
363#ifdef RANDOM_POIS
364 long random_q_low_path_length = 0;
365 if (q_low_path_length > 0.0) {
366 int ierror = 0;
367 random_q_low_path_length = pois(q_low_path_length, ierror);
368 check_econd11a(ierror, == 1,
369 " q_low_path_length=" << q_low_path_length << '\n', mcerr);
370 q_low_path_length = long(random_q_low_path_length);
371 if (s_print_listing == 1) {
372 mcout << "After pois:\n";
374 }
375 }
376#endif
377 if (q_low_path_length > 0) {
378#ifdef DIRECT_LOW_IF_LITTLE
380 // direct modeling
381 if (s_print_listing == 1) {
382 mcout << "direct modeling of low scatterings\n";
384 }
385 long n1r = emesh->get_interval_number_between_centers(ek_restricted);
386 if (n1r < 0) n1r = 0;
387 if (n1r > qener - 1) n1r = qener - 1;
388 for (long nscat = 0; nscat < q_low_path_length; ++nscat) {
389 if (s_print_listing == 1) Iprintn(mcout, nscat);
390 double theta_rot =
391 hdecs->low_angular_points_ran[n1r].ran(SRANLUX()) / 180.0 * M_PI;
392 if (s_print_listing == 1)
393 Iprint2nf(mcout, theta_rot, theta_rot / M_PI * 180.0);
394 vec dir = currpos.dir;
395 //Iprint(mcout, dir);
396 basis temp(dir, "temp");
397 vec vturn;
398 vturn.random_round_vec();
399 vturn = vturn * sin(theta_rot);
400 vec new_dir(vturn.x, vturn.y, cos(theta_rot));
401 new_dir.down(&temp);
402 currpos.dir = new_dir;
403 if (s_print_listing == 1) Iprint(mcout, new_dir);
404 }
407 } else {
408#endif
409 double sigma_ctheta =
410 hdecs->get_sigma(ek_restricted, q_low_path_length);
411 // actually it is mean(1-cos(theta)) or
412 // sqrt( mean( square(1-cos(theta) ) ) ) depending on USE_MEAN_COEF
413
414 if (s_print_listing == 1) Iprintnf(mcout, sigma_ctheta);
415 /*
416 This is for Gauss.
417 But actually exponential distribution fits better.
418 float r1 = SRANLUX();
419 float r2 = SRANLUX();
420 float x1, x2;
421 rnorm(r1, r2, x1, x2);
422 //Iprintn(mcout, x1);
423 double ctheta = 1.0 - fabs(x1 * sigma_ctheta);
424 // By the way,
425 // it seems that there were no condition > -1.0, this is error.
426 */
427 // Exponential:
428 double ctheta = 0.0;
429 {
430#ifdef USE_MEAN_COEF
431#else
432 double sq2 = sqrt(2.0);
433#endif
434 do {
435 double y = 0.0;
436 do { // in order to avoid SRANLUX() = 1
437 y = SRANLUX();
438 if (s_print_listing == 1) Iprintnf(mcout, y);
439 } while (y == 1.0);
440#ifdef USE_MEAN_COEF
441 double x = sigma_ctheta * (-log(1.0 - y));
442#else
443 double x = sigma_ctheta * 1.0 / sq2 * (-log(1.0 - y));
444#endif
445 ctheta = 1.0 - x;
446 if (s_print_listing == 1) Iprint2nf(mcout, x, ctheta);
447 } while (ctheta <= -1.0); // avoid absurd cos(theta)
448 check_econd21(ctheta, < -1.0 ||, > 1.0, mcerr);
449 }
450 if (s_print_listing == 1) Iprintnf(mcout, ctheta);
451 double theta_rot = acos(ctheta);
452 if (s_print_listing == 1) {
453 Iprint2nf(mcout, theta_rot, theta_rot / M_PI * 180.0);
454 }
455 vec dir = currpos.dir;
456 //Iprint(mcout, dir);
457 basis temp(dir, "temp");
458 //long n1r = emesh->get_interval_number_between_centers(ek_restricted);
459 //double theta_rot = angular_points_ran[nr1].ran(SRANLUX());
460 //Iprintn(mcout, theta_rot);
461 //double phi = 2.0 * M_PI * SRANLUX();
462 vec vturn;
463 vturn.random_round_vec();
464 vturn = vturn * sin(theta_rot);
465 vec new_dir(vturn.x, vturn.y, cos(theta_rot));
466 new_dir.down(&temp);
467 currpos.dir = new_dir;
468 //Iprint(mcout, new_dir);
471 }
472#ifdef DIRECT_LOW_IF_LITTLE
473 }
474#endif
475 if (s_path_length == 1) {
476 if (s_print_listing == 1) {
477 mcout << "\nstarting to rotate by large angle" << std::endl;
479 }
480 long n1r = emesh->get_interval_number_between_centers(ek_restricted);
481 if (n1r < 0) n1r = 0;
482 if (n1r > qener - 1) n1r = qener - 1;
483 double theta_rot =
484 hdecs->angular_points_ran[n1r].ran(SRANLUX()) / 180.0 * M_PI;
485 if (s_print_listing == 1) Iprintnf(mcout, theta_rot);
486 vec dir = currpos.dir;
487 //Iprint(mcout, dir);
488 basis temp(dir, "temp");
489 vec vturn;
490 vturn.random_round_vec();
491 vturn = vturn * sin(theta_rot);
492 vec new_dir(vturn.x, vturn.y, cos(theta_rot));
493 new_dir.down(&temp);
494 currpos.dir = new_dir;
495 //Iprint(mcout, new_dir);
498 }
499 } else {
500 // no need to scater
501 absvol* vav = currpos.G_lavol(); // get least address of volume
502 SensitiveVolume* asv = dynamic_cast<SensitiveVolume*>(vav);
503 if (asv != NULL) {
504 if (s_print_listing == 1) mcout << "Last conduction electron\n";
506 //HeedCondElectron hce(currpos.pt, currpos.ptloc, currpos.tid, this);
507 asv->conduction_electron_bank.append(hce);
508 //conduction_electron_bank.insert_after
509 // ( conduction_electron_bank.get_last_node(), hce);
510 }
511 }
512 if (s_print_listing == 1) {
515 }
516}
517
518void HeedDeltaElectron::print(std::ostream& file, int l) const {
519 if (l >= 0) {
520 Ifile << "HeedDeltaElectron (l=" << l
521 << "): particle_number=" << particle_number << "\n";
522 if (l == 1) return;
523 indn.n += 2;
524 Ifile << "s_low_mult_scattering=" << s_low_mult_scattering
525 << " s_high_mult_scattering=" << s_high_mult_scattering << '\n';
526 Ifile << "phys_mrange=" << phys_mrange << " s_stop_eloss=" << s_stop_eloss
527 << " s_mult_low_path_length=" << s_mult_low_path_length << '\n';
528 Ifile << "q_low_path_length=" << q_low_path_length
529 << " s_path_length=" << s_path_length
530 << " necessary_energy/eV=" << necessary_energy / eV << '\n';
531 Ifile << " parent_particle_number=" << parent_particle_number << '\n';
532
533 mparticle::print(file, l - 1);
534 indn.n -= 2;
535 }
536}
537
538}
DoubleAc cos(const DoubleAc &f)
Definition: DoubleAc.cpp:431
DoubleAc sqrt(const DoubleAc &f)
Definition: DoubleAc.cpp:313
DoubleAc sin(const DoubleAc &f)
Definition: DoubleAc.cpp:383
DoubleAc acos(const DoubleAc &f)
Definition: DoubleAc.cpp:488
#define check_econd21(a, sign1_b1_sign0, sign2_b2, stream)
Definition: FunNameStack.h:428
#define check_econd11(a, signb, stream)
Definition: FunNameStack.h:366
#define check_econd11a(a, signb, add, stream)
Definition: FunNameStack.h:395
#define mfunname(string)
Definition: FunNameStack.h:67
long get_interval_number_between_centers(double ener)
Definition: EnergyMesh.cpp:93
long get_q() const
Definition: EnergyMesh.h:51
double get_ec(long n) const
Definition: EnergyMesh.h:57
PassivePtr< HeedDeltaElectronCS > hdecs
double get_sigma(double energy, double nscat) const
PassivePtr< HeedMatterDef > hmd
DynLinArr< double > lambda
PassivePtr< PairProd > pairprod
DynLinArr< PointsRan > angular_points_ran
PassivePtr< ElElasticScatLowSigma > eesls
DynLinArr< PointsRan > low_angular_points_ran
DynLinArr< double > low_lambda
virtual void physics_after_new_speed()
virtual void physics_mrange(double &fmrange)
virtual void print(std::ostream &file, int l) const
BlkArr< HeedCondElectron > conduction_electron_bank
double prev_kin_energy
Definition: mparticle.h:29
double curr_kin_energy
Definition: mparticle.h:31
double mass
Mass (not mass * speed_of_light^2)
Definition: mparticle.h:25
virtual void print(std::ostream &file, int l) const
Definition: mparticle.cpp:308
double curr_gamma_1
Definition: mparticle.h:32
Definition: volume.h:91
Definition: vec.h:397
stvpoint currpos
Definition: gparticle.h:188
stvpoint prevpos
Definition: gparticle.h:187
int s_life
Definition: gparticle.h:180
void up_absref(absref *f)
Definition: volume.cpp:37
Definition: vec.h:477
point pt
Definition: gparticle.h:33
point ptloc
Definition: gparticle.h:37
absvol * G_lavol() const
Definition: gparticle.h:63
vec dirloc
Definition: gparticle.h:39
vfloat prange
Definition: gparticle.h:54
manip_absvol_treeid tid
Definition: gparticle.h:43
vfloat time
Definition: gparticle.h:55
vec dir
Definition: gparticle.h:35
vfloat speed
Definition: gparticle.h:41
Definition: vec.h:248
vfloat y
Definition: vec.h:250
void down(const basis *fabas)
Definition: vec.cpp:247
void random_round_vec(void)
Definition: vec.cpp:311
vfloat x
Definition: vec.h:250
Definition: BGMesh.cpp:3
long last_particle_number
Definition: HeedParticle.h:26
double lorbeta(const double gamma_1)
Definition: lorgamma.cpp:22
const long max_q_low_path_length_for_direct
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:122
long pois(double AMU, int &IERROR)
Definition: pois.cpp:17
indentation indn
Definition: prstream.cpp:13
#define Iprint3nf(file, name1, name2, name3)
Definition: prstream.h:253
#define mcout
Definition: prstream.h:133
#define Iprint3n(file, name1, name2, name3)
Definition: prstream.h:249
#define Ifile
Definition: prstream.h:207
#define Iprint(file, name)
Definition: prstream.h:209
#define mcerr
Definition: prstream.h:135
#define Iprintn(file, name)
Definition: prstream.h:216
#define Iprintf(file, name)
Definition: prstream.h:211
#define Iprint2nf(file, name1, name2)
Definition: prstream.h:239
#define Iprint2n(file, name1, name2)
Definition: prstream.h:236
#define Iprintnf(file, name)
Definition: prstream.h:218
ffloat SRANLUX(void)
Definition: ranluxint.h:262
int vecerror
Definition: vec.cpp:31
double vfloat
Definition: vfloat.h:15