45 const G4double G4LorentzConvertor::small = 1.0e-10;
 
   48   : verboseLevel(0), v2(0.), ecm_tot(0.), valong(0.), degenerated(false) {}
 
   53   : verboseLevel(0), v2(0.), ecm_tot(0.), valong(0.), degenerated(false) {
 
   61   : verboseLevel(0), v2(0.), ecm_tot(0.), valong(0.), degenerated(false) {
 
   80     G4cout << 
" >>> G4LorentzConvertor::toTheCenterOfMass" << 
G4endl;
 
   82   velocity = (target_mom+bullet_mom).boostVector();
 
   83   if (verboseLevel > 3) 
G4cout << 
" boost " << velocity << 
G4endl;
 
   86   scm_momentum = target_mom;
 
   87   scm_momentum.
boost(-velocity);
 
   97     G4cout << 
" >>> G4LorentzConvertor::toTheTargetRestFrame" << 
G4endl;
 
  100   if (verboseLevel > 3) 
G4cout << 
" boost " << velocity << 
G4endl;
 
  103   scm_momentum = bullet_mom;
 
  104   scm_momentum.
boost(-velocity);
 
  106   if (verboseLevel > 3) 
G4cout << 
" pseudo-pscm " << scm_momentum.
vect() << 
G4endl;
 
  114   ecm_tot = (target_mom+bullet_mom).
m();
 
  116   scm_direction = scm_momentum.
vect().
unit();
 
  117   valong = velocity.
dot(scm_direction);
 
  119   v2 = velocity.
mag2();
 
  122   if (verboseLevel > 3) 
G4cout << 
" pvsq " << pvsq << 
G4endl;
 
  124   degenerated = (pvsq < small);
 
  125   if (degenerated && verboseLevel > 2) 
 
  126     G4cout << 
" degenerated case (already along Z) " << 
G4endl; 
 
  128   if (verboseLevel > 3) {
 
  129     G4cout << 
" v2 " << v2 << 
" valong " << valong
 
  130        << 
" valong*valong " << valong*valong << 
G4endl;
 
  136   if (verboseLevel > 2)
 
  137     G4cout << 
" >>> G4LorentzConvertor::backToTheLab" << 
G4endl;
 
  139   if (verboseLevel > 3)
 
  140     G4cout << 
" at rest: px " << mom.
x() << 
" py " << mom.
y() << 
" pz " 
  141        << mom.
z() << 
" e " << mom.
e() << G4endl
 
  142        << 
" v2 " << v2 << 
G4endl;
 
  145   if (v2 > small) mom1.
boost(velocity);
 
  147   if (verboseLevel > 3)
 
  148     G4cout << 
" at lab: px " << mom1.
x() << 
" py " << mom1.
y() << 
" pz " 
  158   if (verboseLevel > 2)
 
  159     G4cout << 
" >>> G4LorentzConvertor::getKinEnergyInTheTRS" << 
G4endl;
 
  163   return bmom.
e()-bmom.
m();
 
  167   if (verboseLevel > 2)
 
  168     G4cout << 
" >>> G4LorentzConvertor::getTRSMomentum" << 
G4endl;
 
  176   if (verboseLevel > 2)
 
  177     G4cout << 
" >>> G4LorentzConvertor::rotate(G4LorentzVector)" << 
G4endl;
 
  179   if (verboseLevel > 3) {
 
  180     G4cout << 
" valong " << valong << 
" degenerated " << degenerated << G4endl
 
  181        << 
" before rotation: px " << mom.
x() << 
" py " << mom.
y()
 
  182        << 
" pz " << mom.
z() << 
G4endl;
 
  187     if (verboseLevel > 2)
 
  188       G4cout << 
" rotating to align with reference z axis " << 
G4endl;
 
  193     if (vscm.
mag() > small && vxcm.
mag() > small) { 
 
  194       if (verboseLevel > 3) {
 
  195     G4cout << 
" reference z axis " << scm_direction
 
  196            << 
" vscm " << vscm << 
" vxcm " << vxcm << 
G4endl;
 
  200               mom.
z()*scm_direction);
 
  203     G4cerr << 
">>> G4LorentzVector::rotate zero with !degenerated" << 
G4endl;
 
  207   if (verboseLevel > 3) {
 
  208     G4cout << 
" after rotation: px " << mom_rot.
x() << 
" py " << mom_rot.
y()
 
  209        << 
" pz " << mom_rot.
z() << 
G4endl;
 
  217   if (verboseLevel > 2)
 
  218     G4cout << 
" >>> G4LorentzConvertor::rotate(G4LorentzVector,G4LorentzVector)" 
  221   if (verboseLevel > 3) {
 
  222     G4cout << 
" before rotation: px " << mom.
x() << 
" py " << mom.
y()
 
  223        << 
" pz " << mom.
z() << 
G4endl;
 
  230   if (verboseLevel > 3) {
 
  231     G4cout << 
" vperp " << vperp << 
" small? " << (vperp <= small) << G4endl;
 
  237     if (verboseLevel > 2)
 
  238       G4cout << 
" rotating to align with first z axis " << 
G4endl;
 
  243     if (vmom1.
mag() > small && vxm1.
mag() > small) {    
 
  244       if (verboseLevel > 3) {
 
  245     G4cout << 
" first z axis " << mom1_dir << G4endl
 
  246            << 
" vmom1 " << vmom1 << 
" vxm1 " << vxm1 << 
G4endl;
 
  253     G4cerr << 
">>> G4LorentzVector::rotate zero with !degenerated" << 
G4endl;
 
  257   if (verboseLevel > 3) {
 
  258     G4cout << 
" after rotation: px " << mom_rot.
x() << 
" py " << mom_rot.
y()
 
  259        << 
" pz " << mom_rot.
z() << 
G4endl;
 
  266   if (verboseLevel > 2)
 
  267     G4cout << 
" >>> G4LorentzConvertor::reflectionNeeded (query)" << 
G4endl;
 
  269   if (verboseLevel > 3) {
 
  270     G4cout << 
" v2 = " << v2 << 
" SCM z = " << scm_momentum.
z()
 
  271        << 
" degenerated? " << degenerated << 
G4endl;
 
  274   if (v2 < small && !degenerated) 
 
  275     throw G4HadronicException(__FILE__, __LINE__, 
"G4LorentzConvertor::reflectionNeeded - return value undefined");
 
  277   if (verboseLevel > 2) {
 
  278     G4cout << 
" reflection across XY is" 
  279        << ((v2>=small && (!degenerated || scm_momentum.
z()<0.0))?
"":
" NOT")
 
  283   return (v2>=small && (!degenerated || scm_momentum.
z()<0.0));
 
  290   G4cout << 
" G4LC bullet: px " << bullet_mom.
px() << 
" py " << bullet_mom.
py()
 
  291      << 
" pz " << bullet_mom.
pz() << 
" e " << bullet_mom.
e()
 
  292      << 
" mass " << bullet_mom.
m() << 
G4endl;
 
  296   G4cout << 
" G4LC target: px " << target_mom.
px() << 
" py " << target_mom.
py()
 
  297      << 
" pz " << target_mom.
pz() << 
" e " << target_mom.
e()
 
  298      << 
" mass " << target_mom.
m() << 
G4endl;
 
Hep3Vector boostVector() const 
 
G4double getTRSMomentum() const 
 
G4LorentzVector getMomentum() const 
 
double dot(const Hep3Vector &) const 
 
G4LorentzVector rotate(const G4LorentzVector &mom) const 
 
void setBullet(const G4InuclParticle *bullet)
 
G4LorentzVector backToTheLab(const G4LorentzVector &mom) const 
 
G4GLOB_DLL std::ostream G4cout
 
static constexpr double m
 
HepLorentzVector & boost(double, double, double)
 
G4double getKinEnergyInTheTRS() const 
 
G4bool reflectionNeeded() const 
 
Hep3Vector cross(const Hep3Vector &) const 
 
void setVect(const Hep3Vector &)
 
void toTheTargetRestFrame()
 
G4GLOB_DLL std::ostream G4cerr
 
void setTarget(const G4InuclParticle *target)