24 :
eparticle(primvol, pt, vel, time, fpardef),
25 transferred_energy_in_step(0.0),
27 s_loss_only(fs_loss_only),
28 s_print_listing(fs_print_listing) {
29 mfunname(
"HeedParticle_BGM::HeedParticle_BGM(...)");
39 mfunname(
"void HeedParticle_BGM::physics(void)");
41 mcout <<
"HeedParticle_BGM::physics is started\n";
54 if (etcs_bgm_t == NULL) {
77 long qa = amatter->
qatom();
83 long qe = a_energy_mesh->
get_q();
87 for (na = 0; na < qa; na++) {
91 long qs = ahmd->
apacs[na]->get_qshell();
94 for (ns = 0; ns < qs; ns++) {
100#ifdef SINGLE_TRANSFER
101 if (aetcs == aetcs_single_transf && na == na_single_transf &&
102 ns == ns_single_transf) {
113 &(aetcs_bgm->
mesh->x));
122 mcerr <<
"ERROR in void HeedParticle_BGM::physics(void)\n";
123 mcerr <<
"betta*gamma is outside range of Cross Section table\n";
125 std::streamsize old_prec =
mcerr.precision(15);
127 mcerr.precision(old_prec);
131 mcerr <<
"This particle is:\n";
133 mcerr <<
"This volume is:\n";
143 double y1 = aetcs_bgm->
etcs_bgm[n1].quan[na][ns];
144 double y2 = aetcs_bgm->
etcs_bgm[n2].quan[na][ns];
146 double mean_pois = y1 + (bg - b1) * (y2 - y1) / (b2 - b1);
157 " mean_pois=" << mean_pois <<
" currpos.prange/cm="
180 for (nt = 0; nt < qt; nt++) {
191#ifdef SINGLE_TRANSFER
215 double r1 = t_hisran_step_ar<double, DynLinArr<double>,
217 pcm_e, aetcs_bgm->
etcs_bgm[n1].fadda[na][ns], rn);
218 double r2 = t_hisran_step_ar<double, DynLinArr<double>,
220 pcm_e, aetcs_bgm->
etcs_bgm[n2].fadda[na][ns], rn);
221 double r = r1 + (bg - b1) * (r2 - r1) / (b2 - b1);
238#ifdef SINGLE_TRANSFER
239 double arange = 0.5 * range;
241 double arange =
SRANLUX() * range;
243 point pt = curpt + dir * arange;
250 mcout <<
"generating new cluster\n";
271 double theta_p, theta_t;
283 mcout <<
"generating new virtual photon\n";
294 ActivePtr<gparticle> ac;
306 mcout <<
"Exiting HeedParticle_BGM::physics\n";
312 Ifile <<
"HeedParticle_BGM (l=" << l
323 Ifile <<
" nt natom nshell transferred_energy\n";
326 Ifile << std::setw(3) << nt <<
' ' << std::setw(3) <<
natom[nt] <<
' ' << std::setw(3)
DoubleAc sqrt(const DoubleAc &f)
DoubleAc fabs(const DoubleAc &f)
#define check_econd11a(a, signb, add, stream)
void allocate_block(long fqel)
void append(const T &val)
PassivePtr< EnTransfCS_BGM > etcs_bgm
PassivePtr< HeedMatterDef > hmd
DynLinArr< EnTransfCS > etcs_bgm
PassivePtr< BGMesh > mesh
PassivePtr< MatterDef > matter
PassivePtr< EnergyMesh > energy_mesh
DynLinArr< PassivePtr< const AtomPhotoAbsCS > > apacs
BlkArr< double > transferred_energy
double transferred_energy_in_step
virtual void physics(void)
virtual void print(std::ostream &file, int l) const
double mass
Mass (not mass * speed_of_light^2)
virtual void print(std::ostream &file, int l) const
void print_notation(std::ostream &file) const
virtual int get_interval(long n, T &b1, T &b2) const
virtual void print(std::ostream &file, int l) const
PassivePtr< manip_absvol > amvol
manip_absvol_eid eid[pqamvol]
void up_absref(absref *f)
void random_conic_vec(double theta)
void down(const basis *fabas)
BlkArr< HeedCluster > cluster_bank
long last_particle_number
AbsList< ActivePtr< gparticle > > particle_bank
particle_def electron_def("electron", "e-", electron_mass_c2/c_squared, electron_charge, 1, 0, 0.5, spin_def(0.0, 0.0))
void theta_two_part(double Ep0, double Ep1, double Mp, double Mt, double &theta_p, double &theta_t)
long pois(double AMU, int &IERROR)
#define Iprint3n(file, name1, name2, name3)
#define Iprint(file, name)
#define Iprintn(file, name)
#define Iprint2n(file, name1, name2)