| 1 | <!-- ******************************************************** -->
|
|---|
| 2 | <!-- Docbook Version: For Toolkit Developers Guide -->
|
|---|
| 3 | <!-- ******************************************************** -->
|
|---|
| 4 |
|
|---|
| 5 | <!-- ******************* Section (Level#1) ****************** -->
|
|---|
| 6 | <sect1 id="sect.ExtdFuncParticles">
|
|---|
| 7 | <title>
|
|---|
| 8 | Particles
|
|---|
| 9 | </title>
|
|---|
| 10 |
|
|---|
| 11 | <!-- ******************* Section (Level#2) ****************** -->
|
|---|
| 12 | <sect2 id="sect.ExtdFuncParticles.Properties">
|
|---|
| 13 | <title>
|
|---|
| 14 | Properties of particles
|
|---|
| 15 | </title>
|
|---|
| 16 |
|
|---|
| 17 | <para>
|
|---|
| 18 | The <emphasis>G4ParticleDefinition</emphasis> class has
|
|---|
| 19 | properties to characterize individual particles,
|
|---|
| 20 | such as name, mass, charge, spin, and so on.
|
|---|
| 21 | Properties of particles are set during initialization of each particle.
|
|---|
| 22 | Default values of particle properties are described in each particles class.
|
|---|
| 23 | In addition, properties of heavy nuclei can be given by external files.
|
|---|
| 24 | Basicaly, these properties can not be changed after initialization phase except for
|
|---|
| 25 | ones related its decay; life time, branching ratio of each decay mode and
|
|---|
| 26 | the ``stable'' flag. However, Geant4 proivides a method to override these properties
|
|---|
| 27 | by using external files.
|
|---|
| 28 | </para>
|
|---|
| 29 |
|
|---|
| 30 |
|
|---|
| 31 | <!-- ******* Bridgehead ******* -->
|
|---|
| 32 | <bridgehead renderas='sect4'>
|
|---|
| 33 | Properties of nuclei
|
|---|
| 34 | </bridgehead>
|
|---|
| 35 |
|
|---|
| 36 | <para>
|
|---|
| 37 | Individual classes are provided for light nuclei (i.e. deuteron, triton, He3, and He4)
|
|---|
| 38 | with default values of their properties.
|
|---|
| 39 | Other nuclei are dynamically created by requests from processes (and users).
|
|---|
| 40 | <emphasis>G4IonTable</emphasis> class handles creation of such ions.
|
|---|
| 41 | Default properties of nuclei are determined with help of <emphasis>G4NuclearProperties</emphasis>.
|
|---|
| 42 | </para>
|
|---|
| 43 | <para>
|
|---|
| 44 | Users can register a <emphasis>G4IsotopeTable</emphasis> to the
|
|---|
| 45 | <emphasis>G4IonTable</emphasis>. <emphasis>G4IsotopeTable</emphasis>
|
|---|
| 46 | describes properties of ions which are used to create ions.
|
|---|
| 47 | You can get exited energy, decay modes, and life time for relatively long life nuclei
|
|---|
| 48 | by using <emphasis>G4RIsotopeTable</emphasis> and data files
|
|---|
| 49 | (G4RADIOACTIVEDATA should be set to the directory where data files exist).
|
|---|
| 50 | <emphasis>G4IsotopeMagneticMomentTable</emphasis> provides a table of
|
|---|
| 51 | magnetic moment of nuclei with the data file of
|
|---|
| 52 | <emphasis>G4IsotopeMagneticMoment.table</emphasis> (The file name should be set to G4IONMAGNETICMOMENT )
|
|---|
| 53 | </para>
|
|---|
| 54 |
|
|---|
| 55 | <!-- ******* Bridgehead ******* -->
|
|---|
| 56 | <bridgehead renderas='sect4'>
|
|---|
| 57 | Changing particle properties
|
|---|
| 58 | </bridgehead>
|
|---|
| 59 |
|
|---|
| 60 | <para>
|
|---|
| 61 | Only in ``PreInit'' phase, properties can be modified with help of
|
|---|
| 62 | <emphasis> G4ParticlePropertyTable</emphasis> class.
|
|---|
| 63 | Particle properties can be overridden with the method
|
|---|
| 64 | <informalexample><programlisting>
|
|---|
| 65 | G4bool SetParticleProperty(const G4ParticlePropertyData& newProperty)
|
|---|
| 66 | </programlisting></informalexample>
|
|---|
| 67 | by setting new values in <emphasis> G4ParticlePropertyData </emphasis>.
|
|---|
| 68 | In addition, the current values of particles properties can be extracted
|
|---|
| 69 | into text files by using <emphasis> G4TextPPReporter </emphasis>.
|
|---|
| 70 | On the other hand, <emphasis> G4TextPPRetriever </emphasis> can change particle
|
|---|
| 71 | properties according to text files.
|
|---|
| 72 | </para>
|
|---|
| 73 |
|
|---|
| 74 | </sect2>
|
|---|
| 75 |
|
|---|
| 76 | <!-- ******************* Section (Level#2) ****************** -->
|
|---|
| 77 | <sect2 id="sect.ExtdFuncParticles.AddNewPar">
|
|---|
| 78 | <title>
|
|---|
| 79 | Adding New Particles
|
|---|
| 80 | </title>
|
|---|
| 81 |
|
|---|
| 82 | <para>
|
|---|
| 83 | You can add a new particle by creating a new class for it.
|
|---|
| 84 | The new class should be derived from <emphasis>G4ParticleDefinition</emphasis>.
|
|---|
| 85 | You can find an example under examples/extended/exoticphysics/monopole.
|
|---|
| 86 | A new class for the monople is defined as follows;
|
|---|
| 87 | <informalexample><programlisting>
|
|---|
| 88 | class G4Monopole : public G4ParticleDefinition
|
|---|
| 89 | {
|
|---|
| 90 | private:
|
|---|
| 91 | static G4Monopole* theMonopole;
|
|---|
| 92 |
|
|---|
| 93 | G4Monopole(
|
|---|
| 94 | const G4String& aName, G4double mass,
|
|---|
| 95 | G4double width, G4double charge,
|
|---|
| 96 | G4int iSpin, G4int iParity,
|
|---|
| 97 | G4int iConjugation, G4int iIsospin,
|
|---|
| 98 | G4int iIsospin3, G4int gParity,
|
|---|
| 99 | const G4String& pType, G4int lepton,
|
|---|
| 100 | G4int baryon, G4int encoding,
|
|---|
| 101 | G4bool stable, G4double lifetime,
|
|---|
| 102 | G4DecayTable *decaytable );
|
|---|
| 103 |
|
|---|
| 104 | public:
|
|---|
| 105 | virtual ~G4Monopole();
|
|---|
| 106 | static G4Monopole* MonopoleDefinition();
|
|---|
| 107 | static G4Monopole* Monopole();
|
|---|
| 108 | }
|
|---|
| 109 | </programlisting></informalexample>
|
|---|
| 110 | Static methods above need to be defined and implemented so that
|
|---|
| 111 | this new particle instance will be created
|
|---|
| 112 | in ConstructParticls method of your physics list.
|
|---|
| 113 | You can add new properties if necessary (G4Monopole has a property for magnetic charge)
|
|---|
| 114 | Values of properties need to be given in the static method as other particle classes.
|
|---|
| 115 | <informalexample><programlisting>
|
|---|
| 116 | G4Monopole* G4Monopole::MonopoleDefinition(G4double mass, G4int mCharge, G4int eCharge)
|
|---|
| 117 | {
|
|---|
| 118 | if(!theMonopole) {
|
|---|
| 119 | theMonopole = new G4Monopole(
|
|---|
| 120 | "monopole", mass, 0.0*MeV, 0,
|
|---|
| 121 | 0, 0, 0,
|
|---|
| 122 | 0, 0, 0,
|
|---|
| 123 | "boson", 0, 0, 0,
|
|---|
| 124 | true, -1.0, 0);
|
|---|
| 125 | }
|
|---|
| 126 | return theMonopole;
|
|---|
| 127 | }
|
|---|
| 128 | </programlisting></informalexample>
|
|---|
| 129 | </para>
|
|---|
| 130 |
|
|---|
| 131 | <!-- ******* Bridgehead ******* -->
|
|---|
| 132 | <bridgehead role="revisionHistory" renderas="sect4">
|
|---|
| 133 | [Status of this chapter]
|
|---|
| 134 | </bridgehead>
|
|---|
| 135 | <para>
|
|---|
| 136 | <simplelist type="var">
|
|---|
| 137 | <member>
|
|---|
| 138 | Nov. 2008 cretad by H. Kurashige
|
|---|
| 139 | </member>
|
|---|
| 140 | </simplelist>
|
|---|
| 141 | </para>
|
|---|
| 142 |
|
|---|
| 143 | </sect2>
|
|---|
| 144 | </sect1>
|
|---|
| 145 |
|
|---|