Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4LorentzConvertor.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id$
27//
28// 20100108 Michael Kelsey -- Use G4LorentzVector internally
29// 20100120 M. Kelsey -- BUG FIX: scm_momentum should be G4ThreeVector
30// 20100126 M. Kelsey -- Remove G4CascadeMomentum, use G4LorentzVector directly
31// 20100519 M. Kelsey -- Add interfaces to pass G4InuclParticles directly
32// 20100616 M. Kelsey -- Report bullet and target four-momenta when set
33// 20100915 M. Kelsey -- Move constructors to .cc file, add initializers
34// 20110602 M. Kelsey -- Drop some unnecessary kinematics intermediates
35
36#ifndef G4LORENTZ_CONVERTOR_HH
37#define G4LORENTZ_CONVERTOR_HH
38
39#include "globals.hh"
40#include "G4LorentzVector.hh"
41#include "G4ThreeVector.hh"
42
43class G4InuclParticle;
44
46public:
48
50 const G4LorentzVector& tmom, G4double tmass);
51
53 const G4InuclParticle* target);
54
55 void setVerbose(G4int vb=0) { verboseLevel = vb; }
56
57 void setBullet(const G4InuclParticle* bullet);
58 void setTarget(const G4InuclParticle* target);
59
60 void setBullet(const G4InuclParticle& bullet) { setBullet(&bullet); }
61 void setTarget(const G4InuclParticle& target) { setTarget(&target); }
62
63 // Use correct four-vectors as input
64 void setBullet(const G4LorentzVector& bmom) {
65 bullet_mom = bmom;
66 if (verboseLevel > 3) printBullet();
67 }
68
69 void setTarget(const G4LorentzVector& bmom) {
70 target_mom = bmom;
71 if (verboseLevel > 3) printTarget();
72 }
73
74 // These functions "repair" input 4-vectors using specified mass
75 void setBullet(const G4LorentzVector& bmom, G4double bmass) {
76 bullet_mom.setVectM(bmom.vect(), bmass);
77 if (verboseLevel > 3) printBullet();
78 }
79
80 void setTarget(const G4LorentzVector& tmom, G4double tmass) {
81 target_mom.setVectM(tmom.vect(), tmass);
82 if (verboseLevel > 3) printTarget();
83 }
84
85 // Select reference frame for boosts, rotations, etc.
86 void toTheCenterOfMass();
88 void fillKinematics(); // Common calculations after either of above
89
91
92 // Four-vectors of bullet and target in last chosen reference frame
93 const G4LorentzVector& getBullet() const { return bullet_mom; }
94 const G4LorentzVector& getTarget() const { return target_mom; }
95
97 G4double getTotalSCMEnergy() const { return ecm_tot; }
98 G4double getSCMMomentum() const { return scm_momentum.rho(); }
100
101 G4LorentzVector rotate(const G4LorentzVector& mom) const;
102
104 const G4LorentzVector& mom) const;
105
106 G4bool reflectionNeeded() const;
107
108 G4bool trivial() const { return degenerated; }
109
110 // Reporting functions for diagnostics
111 void printBullet() const;
112 void printTarget() const;
113
114private:
115 static const G4double small;
116
117 G4int verboseLevel;
118 G4LorentzVector bullet_mom;
119 G4LorentzVector target_mom;
120
121 G4LorentzVector scm_momentum; // CM momentum relative to target/bullet
122 G4ThreeVector scm_direction; // Unit vector to reduce repeated calcs
123
124 // Buffer variables for doing ::rotate() calculations
125 G4ThreeVector velocity;
126 G4double v2;
127 G4double ecm_tot;
128 G4double valong;
129 G4bool degenerated;
130};
131
132#endif // G4LORENTZ_CONVERTOR_HH
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
void setVectM(const Hep3Vector &spatial, double mass)
Hep3Vector vect() const
G4double getTRSMomentum() const
void setBullet(const G4InuclParticle &bullet)
void setTarget(const G4LorentzVector &bmom)
void setTarget(const G4InuclParticle &target)
G4double getTotalSCMEnergy() const
const G4LorentzVector & getTarget() const
G4bool reflectionNeeded() const
void setVerbose(G4int vb=0)
void setBullet(const G4InuclParticle *bullet)
G4double getSCMMomentum() const
G4LorentzVector backToTheLab(const G4LorentzVector &mom) const
void setTarget(const G4LorentzVector &tmom, G4double tmass)
void setBullet(const G4LorentzVector &bmom)
G4LorentzVector rotate(const G4LorentzVector &mom) const
const G4LorentzVector & getBullet() const
void setBullet(const G4LorentzVector &bmom, G4double bmass)
G4double getKinEnergyInTheTRS() const
void setTarget(const G4InuclParticle *target)