Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4PrimaryParticle.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 //
27 // $Id: G4PrimaryParticle.hh 67971 2013-03-13 10:13:24Z gcosmo $
28 //
29 //
30 
31 
32 #ifndef G4PrimaryParticle_h
33 #define G4PrimaryParticle_h 1
34 
35 #include "globals.hh"
36 #include "G4Allocator.hh"
37 #include "G4ThreeVector.hh"
38 
39 #include "pwdefs.hh"
40 
43 
44 // class description:
45 //
46 // This is a class which represents a primary particle.
47 // This is completely deferent class from G4Track or G4DynamicParticle.
48 // This class is designed with taking into account the possibility of
49 // making this class persistent, i.e. kept with G4Event class object
50 // to ODBMS. Thus this class is almost free from any other Geant4 classes.
51 // The only exception is a pointer to G4ParticleDefinition but it can be
52 // rebuilt by the PDGcode.
53 //
54 // Primary particles are stored in G4PrimaryVertex object with a form
55 // of linked list. Also, an object of this PrimaryParticle class can have
56 // one or more objects of this class as its daughters with a form of
57 // linked list.
58 // A parimary particle represented by this class object needs not to be
59 // a particle of type which Geant4 can simulate.
60 // case a) mother particle is not a particle Geant4 can simulate
61 // daughters associated to the mother will be examined.
62 // case b) mother particle is a perticle Geant4 can simulate
63 // daughters associated to the mother will be converted to G4Dynamic
64 // particle and be set to the mother G4Track. For this case, dauthers
65 // are used as the "pre-fixed" decay channel.
66 //
67 
69 {
70  public:
71  inline void *operator new(size_t);
72  inline void operator delete(void *aStackedTrack);
73 
74  public: // with description
76  G4PrimaryParticle(G4int Pcode);
78  G4double px,G4double py,G4double pz);
80  G4double px,G4double py,G4double pz,G4double E);
83  G4double px,G4double py,G4double pz);
85  G4double px,G4double py,G4double pz,G4double E);
86 
87  public:
88  virtual ~G4PrimaryParticle();
89 
90  // copy constructor and assignment operator
91  // nextParticle and daughterParticle is copied by object (i.e. deep copy)
92  // userInfo will nt be copied
95 
96  // equal operator returns 'true' only if the same object (i.e comarison by pointer value)
97  G4int operator==(const G4PrimaryParticle &right) const;
98  G4int operator!=(const G4PrimaryParticle &right) const;
99 
100  public: // with description
101  void Print() const;
102  // Print the properties of the particle.
103 
104 
105  public: // with description
106  // followings are get/set methods available.
107  // "trackID" will be set if this particle is sent to G4EventManager
108  // and converted to G4Track. Otherwise = -1.
109  // The mass and charge in G4ParticleDefinition will be used in default.
110  // "SetMass" and "SetCharge" methods are used to set dynamical mass and charge
111  // G4DynamicParticle."GetMass" and "GetCharge" methods will return
112  // those in G4ParticleDefinition if users do not set dynamical ones.
113 
114  G4int GetPDGcode() const;
115  void SetPDGcode(G4int Pcode);
117  void SetG4code(const G4ParticleDefinition * Gcode);
119  void SetParticleDefinition(const G4ParticleDefinition * pdef);
120  G4double GetMass() const;
121  void SetMass(G4double mas);
122  G4double GetCharge() const;
123  void SetCharge(G4double chg);
124  G4double GetKineticEnergy() const;
125  void SetKineticEnergy(G4double eKin);
126  const G4ThreeVector& GetMomentumDirection() const;
127  void SetMomentumDirection(const G4ThreeVector& p);
128  G4double GetTotalMomentum() const;
129  void Set4Momentum(G4double px, G4double py, G4double pz, G4double E);
130  G4double GetTotalEnergy() const;
131  void SetTotalEnergy(G4double eTot );
132  G4ThreeVector GetMomentum() const;
133  void SetMomentum(G4double px, G4double py, G4double pz);
134  G4double GetPx() const;
135  G4double GetPy() const;
136  G4double GetPz() const;
137  G4PrimaryParticle * GetNext() const;
138  void SetNext(G4PrimaryParticle * np);
139  G4PrimaryParticle * GetDaughter() const;
140  void SetDaughter(G4PrimaryParticle * np);
141  G4int GetTrackID() const;
142  void SetTrackID(G4int id);
144  void SetPolarization(const G4ThreeVector& pol);
145  void SetPolarization(G4double px,G4double py,G4double pz);
146  G4double GetPolX() const;
147  G4double GetPolY() const;
148  G4double GetPolZ() const;
149  G4double GetWeight() const;
150  void SetWeight(G4double w);
151  G4double GetProperTime() const;
152  void SetProperTime(G4double t);
155 
156  private:
157  G4int PDGcode;
158  const G4ParticleDefinition * G4code;
159 
160  G4ThreeVector direction;
161  G4double kinE;
162 
163  G4PrimaryParticle * nextParticle;
164  G4PrimaryParticle * daughterParticle;
165 
166  G4int trackID; // This will be set if this particle is
167  // sent to G4EventManager and converted to
168  // G4Track. Otherwise = -1.
169 
170  G4double mass;
171  G4double charge;
172  G4double polX;
173  G4double polY;
174  G4double polZ;
175  G4double Weight0;
176  G4double properTime;
178 
179 };
180 
182 
183 inline void * G4PrimaryParticle::operator new(size_t)
184 {
186  {
188  }
189  return (void *) aPrimaryParticleAllocator->MallocSingle();
190 }
191 
192 inline void G4PrimaryParticle::operator delete(void * aPrimaryParticle)
193 {
194  aPrimaryParticleAllocator->FreeSingle((G4PrimaryParticle *) aPrimaryParticle);
195 }
196 
198 { return mass; }
199 
201 { return charge; }
202 
204 { return PDGcode; }
205 
207 { return const_cast<G4ParticleDefinition*>(G4code); }
208 
210 { return G4code; }
211 
213 {
214  if (mass<0.) return kinE;
215  else return std::sqrt(kinE*(kinE+2.*mass));
216 }
217 
219 { return GetTotalMomentum()*direction;}
220 
222 { return direction;}
223 
225 { direction = p;}
226 
228 { return GetTotalMomentum()*direction.x();}
229 
231 { return GetTotalMomentum()*direction.y();}
232 
234 { return GetTotalMomentum()*direction.z();}
235 
237 {
238  if (mass<0.) return kinE;
239  else return kinE+mass;
240 }
241 
243 {
244  if (mass<0.) kinE = eTot;
245  else kinE = eTot - mass;
246 }
247 
249 { return kinE; }
250 
252 { kinE = eKin; }
253 
255 { return nextParticle; }
256 
258 { return daughterParticle; }
259 
261 { return trackID; }
262 
264 { return G4ThreeVector(polX,polY,polZ); }
265 
267 { return polX; }
268 
270 { return polY; }
271 
273 { return polZ; }
274 
276 { return Weight0; }
277 
279 { Weight0 = w; }
280 
282 { properTime = t; }
283 
285 { return properTime; }
286 
288 { userInfo = anInfo; }
289 
291 { return userInfo; }
292 
294 {
295  SetParticleDefinition(Gcode);
296 }
297 
299 {
300  if (nextParticle == 0) { nextParticle = np; }
301  else { nextParticle->SetNext(np); }
302 }
303 
305 {
306  if(daughterParticle == 0) { daughterParticle = np; }
307  else { daughterParticle->SetNext(np); }
308 }
309 
311 { trackID = id; }
312 
314 { mass = mas; }
315 
317 { charge = chg; }
318 
320 {
321  polX = px;
322  polY = py;
323  polZ = pz;
324 }
325 
327 {
328  polX = pol.x();
329  polY = pol.y();
330  polZ = pol.z();
331 }
332 
333 #endif
void SetNext(G4PrimaryParticle *np)
G4double GetPolX() const
G4ThreeVector GetMomentum() const
void SetUserInformation(G4VUserPrimaryParticleInformation *anInfo)
G4int GetTrackID() const
CLHEP::Hep3Vector G4ThreeVector
double x() const
G4double GetKineticEnergy() const
const char * p
Definition: xmltok.h:285
G4double GetPz() const
G4double GetPx() const
G4ThreeVector GetPolarization() const
G4double GetPolZ() const
G4double GetTotalMomentum() const
G4double GetPolY() const
#define G4ThreadLocal
Definition: tls.hh:52
int G4int
Definition: G4Types.hh:78
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetG4code() const
double z() const
void SetKineticEnergy(G4double eKin)
void SetPDGcode(G4int Pcode)
G4double GetPy() const
G4double GetMass() const
G4PrimaryParticle * GetDaughter() const
void SetTrackID(G4int id)
void SetMass(G4double mas)
G4double GetTotalEnergy() const
G4PART_DLL G4ThreadLocal G4Allocator< G4PrimaryParticle > * aPrimaryParticleAllocator
G4double GetProperTime() const
G4int GetPDGcode() const
G4double GetWeight() const
const G4ParticleDefinition * GetParticleDefinition() const
void SetG4code(const G4ParticleDefinition *Gcode)
G4PrimaryParticle * GetNext() const
void SetMomentumDirection(const G4ThreeVector &p)
void SetParticleDefinition(const G4ParticleDefinition *pdef)
void SetWeight(G4double w)
void SetCharge(G4double chg)
void SetDaughter(G4PrimaryParticle *np)
double y() const
G4double GetCharge() const
G4int operator==(const G4PrimaryParticle &right) const
void SetProperTime(G4double t)
void Set4Momentum(G4double px, G4double py, G4double pz, G4double E)
#define G4PART_DLL
Definition: pwdefs.hh:48
G4PrimaryParticle & operator=(const G4PrimaryParticle &right)
double G4double
Definition: G4Types.hh:76
void SetTotalEnergy(G4double eTot)
void SetMomentum(G4double px, G4double py, G4double pz)
void SetPolarization(const G4ThreeVector &pol)
G4VUserPrimaryParticleInformation * GetUserInformation() const
G4int operator!=(const G4PrimaryParticle &right) const