source: trunk/source/particles/management/include/G4ParticleDefinition.hh@ 1292

Last change on this file since 1292 was 1196, checked in by garnier, 16 years ago

update CVS release candidate geant4.9.3.01

File size: 12.5 KB
RevLine 
[824]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//
[1196]27// $Id: G4ParticleDefinition.hh,v 1.33 2008/11/14 16:26:30 kurasige Exp $
28// GEANT4 tag $Name: geant4-09-03-cand-01 $
[824]29//
30//
31// ------------------------------------------------------------
32// GEANT 4 class header file
33//
34// History: first implementation, based on object model of
35// 2nd December 1995, G.Cosmo
36// ---------------- G4ParticleDefinition ----------------
37// first implementation by Makoto Asai, 29 January 1996
38// revised by G.Cosmo, 29 February 1996
39// revised by H.Kurashige, 19 April 1996
40// revised by H.Kurashige, 4 July 1996
41// added GetEnergyCuts() and GetLengthCuts() by G.Cosmo, 11 July 1996
42// added Set/GetVerboseLevel() H.Kurashige 11 Nov. 1997
43// added SetCuts() and ResetCuts H.Kurashige 15 Nov.1996
44// change SetProcessManager as public H.Kurashige 06 June 1998
45// added GetEnergyThreshold H.Kurashige 08 June 1998
46// added ShortLived flag and ApplyCuts flag H.Kurashige 27 June 1998
47// fixed some improper codings H.Kurashige 08 Apr. 1999
48// added sub-type H.Kurashige 15 Feb. 2000
49// added RestoreCuts H.Kurashige 09 Mar. 2001
50// restructuring for Cuts per Region by Hisaya 11 MAr.2003
51// added MagneticMoment Mar. 2007
52// ------------------------------------------------------------
53
54#ifndef G4ParticleDefinition_h
55#define G4ParticleDefinition_h 1
56
57#include "globals.hh"
58#include "G4ios.hh"
59#include <vector>
60
61class G4ProcessManager;
62class G4DecayTable;
63class G4ParticleTable;
64class G4ParticlePropertyTable;
65
66class G4ParticleDefinition
67{
68 // Class Description
69 // This class containes all the static data of a particle.
70 // It also has uses a process manager in order to collect
71 // all the processes this kind of particle can undertake.
72 //
73
74 friend class G4ParticlePropertyTable;
75
76 public: // With Description
77 // Only one type of constructor can be used for G4ParticleDefinition.
78 // If you want to create new particle, you must set name of the particle
79 // at construction. Most of members seen as arguments of the constructor
80 // (except last 3 arguments concerning with decay ) are "constant"
81 // and can not be changed later. (No "SET" methods are available)
82 // Each type of particle must be constructed as a unique object
83 // of special class derived from G4ParticleDefinition.
84 // see G4ParticleTypes for detail
85
86 G4ParticleDefinition(const G4String& aName,
87 G4double mass,
88 G4double width,
89 G4double charge,
90 G4int iSpin,
91 G4int iParity,
92 G4int iConjugation,
93 G4int iIsospin,
94 G4int iIsospinZ,
95 G4int gParity,
96 const G4String& pType,
97 G4int lepton,
98 G4int baryon,
99 G4int encoding,
100 G4bool stable,
101 G4double lifetime,
102 G4DecayTable *decaytable,
103 G4bool shortlived = false,
104 const G4String& subType ="",
105 G4int anti_encoding =0,
106 G4double magneticMoment = 0.0);
107
108 virtual ~G4ParticleDefinition();
109
110 public: // With Description
111 // By these following Getxxxx methods, you can get values
112 // for members which can not be changed
113 //
114 const G4String& GetParticleName() const { return theParticleName; }
115
116 G4double GetPDGMass() const { return thePDGMass; }
117 G4double GetPDGWidth() const { return thePDGWidth; }
118 G4double GetPDGCharge() const { return thePDGCharge; }
119
120 G4double GetPDGSpin() const { return thePDGSpin; }
121 G4int GetPDGiSpin() const { return thePDGiSpin; }
122 G4int GetPDGiParity() const { return thePDGiParity; }
123 G4int GetPDGiConjugation() const { return thePDGiConjugation; }
124 G4double GetPDGIsospin() const { return thePDGIsospin; }
125 G4double GetPDGIsospin3() const { return thePDGIsospin3; }
126 G4int GetPDGiIsospin() const { return thePDGiIsospin; }
127 G4int GetPDGiIsospin3() const { return thePDGiIsospin3; }
128 G4int GetPDGiGParity() const { return thePDGiGParity; }
129
130 G4double GetPDGMagneticMoment() const { return thePDGMagneticMoment; }
[1196]131 void SetPDGMagneticMoment(G4double mageticMoment);
132 G4double CalculateAnomaly() const;
133 // gives the anomaly of magnetic moment for spin 1/2 particles
[824]134
135 const G4String& GetParticleType() const { return theParticleType; }
136 const G4String& GetParticleSubType() const { return theParticleSubType; }
137 G4int GetLeptonNumber() const { return theLeptonNumber; }
138 G4int GetBaryonNumber() const { return theBaryonNumber; }
139
140 G4int GetPDGEncoding() const { return thePDGEncoding; }
141 G4int GetAntiPDGEncoding() const { return theAntiPDGEncoding; }
142 void SetAntiPDGEncoding(G4int aEncoding);
143
144
145 G4int GetQuarkContent(G4int flavor) const;
146 G4int GetAntiQuarkContent(G4int flavor) const;
147 // return the number of quark with flavor contained in this particle.
148 // The value of flavor is assigned as follows
149 // 1:d, 2:u, 3:s, 4:c, 5:b, 6:t
150
151
152 public: // With Description
153 // ShortLived flag
154 G4bool IsShortLived() const { return fShortLivedFlag; }
155
156 G4bool GetPDGStable() const { return thePDGStable; }
157 void SetPDGStable(const G4bool aFlag) { thePDGStable=aFlag; }
158
159 G4double GetPDGLifeTime() const { return thePDGLifeTime; }
160 void SetPDGLifeTime(G4double aLifeTime) { thePDGLifeTime = aLifeTime; }
161
162 public:// With Description
163 G4DecayTable* GetDecayTable();
164 void SetDecayTable(G4DecayTable* aDecayTable);
165 // Set/Get Decay Table
166 // !! Decay Table can be modified !!
167
168 public: // With Description
169 G4ProcessManager* GetProcessManager() const;
170 void SetProcessManager(G4ProcessManager* aProcessManager);
171 // Set/Get Process Manager
172 // !! Process Manager can be modified !!
173
174 G4ParticleTable* GetParticleTable();
175 // get pointer to the particle table
176
177 void DumpTable() const;
178 // Prints information of data members.
179
180 protected:
181 G4int FillQuarkContents();
182 // calculate quark and anti-quark contents
183 // return value is PDG encoding for this particle.
184 // It means error if the return value is deffernt from
185 // this->thePDGEncoding.
186
187 void SetParticleSubType(const G4String& subtype);
188
189 public: // With Description
190 // Get AtomicNumber and AtomicMass
191 // These properties are defined for nucleus
192 G4int GetAtomicNumber() const;
193 G4int GetAtomicMass() const;
194
195 protected:
196 void SetAtomicNumber(G4int );
197 void SetAtomicMass(G4int );
198
199 public:
200 void SetVerboseLevel(G4int value);
201 G4int GetVerboseLevel() const;
202 // controle flag for output message
203 // 0: Silent
204 // 1: Warning message
205 // 2: More
206
207 protected:
208 // !!! can not use "copy constructor" nor "default constructor" !!!!
209 G4ParticleDefinition(const G4ParticleDefinition &right);
210 G4ParticleDefinition();
211
212 private:
213 // !!! Assignment operation is forbidden !!!
214 const G4ParticleDefinition & operator=(const G4ParticleDefinition &right);
215
216 public:
217 G4int operator==(const G4ParticleDefinition &right) const;
218 G4int operator!=(const G4ParticleDefinition &right) const;
219
220 private:
221 // Values following can not be changed
222 // i.e. No Setxxxx Methods for them
223
224 G4String theParticleName;
225 // The name of the particle.
226 // Each object must have its specific name!!
227
228 // --- following member values must be defined with Units
229 G4double thePDGMass;
230 // The mass of the particle, in units of equivalent energy.
231
232 G4double thePDGWidth;
233 // The decay width of the particle, usually the width of a
234 // Breit-Wigner function, assuming that you are near the
235 // mass center anyway. (in units of equivalent energy)
236
237 G4double thePDGCharge;
238 // The charge of the particle.(in units of Coulomb)
239
240 // ---- following members are quantum number
241 // i.e. discrete numbers can be allowded
242 // So, you can defined only by using integer in constructor
243 G4int thePDGiSpin;
244 // The total spin of the particle, also often denoted as
245 // capital J, in units of 1/2.
246 G4double thePDGSpin;
247 // The total spin of the particle, in units of 1.
248
249 G4int thePDGiParity;
250 // The parity quantum number, in units of 1. If the parity
251 // is not defined for this particle, we will set this to 0.
252
253 G4int thePDGiConjugation;
254 // This charge conjugation quantum number in units of 1.
255
256 G4int thePDGiGParity;
257 // The value of the G-parity quantum number.
258
259 G4int thePDGiIsospin;
260 G4int thePDGiIsospin3;
261 // The isospin and its 3rd-component in units of 1/2.
262 G4double thePDGIsospin;
263 G4double thePDGIsospin3;
264 // The isospin quantum number in units of 1.
265
266 G4double thePDGMagneticMoment;
267 // The magnetic moment.
268
269 G4int theLeptonNumber;
270 // The lepton quantum number.
271
272 G4int theBaryonNumber;
273 // The baryon quantum number.
274
275 G4String theParticleType;
276 // More general textual type description of the particle.
277
278 G4String theParticleSubType;
279 // Textual type description of the particle
280 // eg. pion, lamda etc.
281
282 G4int thePDGEncoding;
283 // The Particle Data Group integer identifier of this particle
284
285 G4int theAntiPDGEncoding;
286 // The Particle Data Group integer identifier of the anti-particle
287
288 protected:
289 enum {NumberOfQuarkFlavor = 6};
290 G4int theQuarkContent[NumberOfQuarkFlavor];
291 G4int theAntiQuarkContent[NumberOfQuarkFlavor];
292 // the number of quark (minus Sign means anti-quark) contents
293 // The value of flavor is assigned as follows
294 // 0:d, 1:u, 2:s, 3:c, 4:b, 5:t
295
296 private:
297 // Following members can be changed after construction
298
299 G4bool fShortLivedFlag;
300 // Particles which have true value of this flag
301 // will not be tracked by TrackingManager
302
303 G4bool thePDGStable;
304 // Is an indicator that this particle is stable. It must
305 // not decay. If the user tries to assign a kind of decay
306 // object to it, it will refuse to take it.
307
308 G4double thePDGLifeTime;
309 // Is related to the decay width of the particle. The mean
310 // life time is given in seconds.
311
312 class G4DecayTable *theDecayTable;
313 // Points DecayTable
314
315 private:
316 class G4ProcessManager *theProcessManager;
317 // Points to G4ProcessManager
318
319 G4ParticleTable* theParticleTable;
320
321 private:
322 G4int theAtomicNumber;
323 G4int theAtomicMass;
324
325 private:
326 G4int verboseLevel;
327
328 private:
329 G4bool fApplyCutsFlag;
330 public:
331
332 void SetApplyCutsFlag(G4bool);
333 G4bool GetApplyCutsFlag() const;
334
335};
336
337#include "G4ParticleDefinition.icc"
338
339#endif
Note: See TracBrowser for help on using the repository browser.