Particles Properties of particles The G4ParticleDefinition class has properties to characterize individual particles, such as name, mass, charge, spin, and so on. Properties of particles are set during initialization of each particle. Default values of particle properties are described in each particles class. In addition, properties of heavy nuclei can be given by external files. Basicaly, these properties can not be changed after initialization phase except for ones related its decay; life time, branching ratio of each decay mode and the ``stable'' flag. However, Geant4 proivides a method to override these properties by using external files. Properties of nuclei Individual classes are provided for light nuclei (i.e. deuteron, triton, He3, and He4) with default values of their properties. Other nuclei are dynamically created by requests from processes (and users). G4IonTable class handles creation of such ions. Default properties of nuclei are determined with help of G4NuclearProperties. Users can register a G4IsotopeTable to the G4IonTable. G4IsotopeTable describes properties of ions which are used to create ions. You can get exited energy, decay modes, and life time for relatively long life nuclei by using G4RIsotopeTable and data files (G4RADIOACTIVEDATA should be set to the directory where data files exist). G4IsotopeMagneticMomentTable provides a table of magnetic moment of nuclei with the data file of G4IsotopeMagneticMoment.table (The file name should be set to G4IONMAGNETICMOMENT ) Changing particle properties Only in ``PreInit'' phase, properties can be modified with help of G4ParticlePropertyTable class. Particle properties can be overridden with the method G4bool SetParticleProperty(const G4ParticlePropertyData& newProperty) by setting new values in G4ParticlePropertyData . In addition, the current values of particles properties can be extracted into text files by using G4TextPPReporter . On the other hand, G4TextPPRetriever can change particle properties according to text files. Adding New Particles You can add a new particle by creating a new class for it. The new class should be derived from G4ParticleDefinition. You can find an example under examples/extended/exoticphysics/monopole. A new class for the monople is defined as follows; class G4Monopole : public G4ParticleDefinition { private: static G4Monopole* theMonopole; G4Monopole( const G4String& aName, G4double mass, G4double width, G4double charge, G4int iSpin, G4int iParity, G4int iConjugation, G4int iIsospin, G4int iIsospin3, G4int gParity, const G4String& pType, G4int lepton, G4int baryon, G4int encoding, G4bool stable, G4double lifetime, G4DecayTable *decaytable ); public: virtual ~G4Monopole(); static G4Monopole* MonopoleDefinition(); static G4Monopole* Monopole(); } Static methods above need to be defined and implemented so that this new particle instance will be created in ConstructParticls method of your physics list. You can add new properties if necessary (G4Monopole has a property for magnetic charge) Values of properties need to be given in the static method as other particle classes. G4Monopole* G4Monopole::MonopoleDefinition(G4double mass, G4int mCharge, G4int eCharge) { if(!theMonopole) { theMonopole = new G4Monopole( "monopole", mass, 0.0*MeV, 0, 0, 0, 0, 0, 0, 0, "boson", 0, 0, 0, true, -1.0, 0); } return theMonopole; } [Status of this chapter] Nov. 2008 cretad by H. Kurashige