Presentation is loading. Please wait.

Presentation is loading. Please wait.

Primary Particle Makoto Asai (SLAC) Geant4 Tutorial Course Geant4 v8.2p01.

Similar presentations


Presentation on theme: "Primary Particle Makoto Asai (SLAC) Geant4 Tutorial Course Geant4 v8.2p01."— Presentation transcript:

1 Primary Particle Makoto Asai (SLAC) Geant4 Tutorial Course Geant4 v8.2p01

2 Primary Particle - M.Asai (SLAC)2 Contents  G4VUserPrimaryGeneratorAction  Primary vertex and primary particle  Built-in primary particle generators  Particle gun  Interfaces to HEPEVT and HEPMC  General particle source  Exotic primary particle

3 Primary particle generation

4 Primary Particle - M.Asai (SLAC)4 User classes  Initialization classes  Use G4RunManager::SetUserInitialization() to define.  Invoked at the initialization  G4VUserDetectorConstruction  G4VUserPhysicsList  Action classes  Use G4RunManager::SetUserAction() to define.  Invoked during an event loop  G4VUserPrimaryGeneratorAction  G4UserRunAction  G4UserEventAction  G4UserStackingAction  G4UserTrackingAction  G4UserSteppingAction  main()  Geant4 does not provide main(). Note : classes written in yellow are mandatory.

5 Primary Particle - M.Asai (SLAC)5G4VUserPrimaryGeneratorAction  This class is one of mandatory user classes to control the generation of primaries.  This class itself should NOT generate primaries but invoke GeneratePrimaryVertex() method of primary generator(s) to make primaries.  Constructor  Instantiate primary generator(s)  Set default values to it(them)  GeneratePrimaries() method  Randomize particle-by-particle value(s)  Set these values to primary generator(s)  Never use hard-coded UI commands  Invoke GeneratePrimaryVertex() method of primary generator(s)

6 Primary vertex and primary particle

7 Primary Particle - M.Asai (SLAC)7 Primary vertices and particles  Primary vertices and primary particles are stored in G4Event in advance to processing an event.  G4PrimaryVertex and G4PrimaryParticle classes  These classes don ’ t have any dependency to G4ParticleDefinition nor G4Track.  Capability of bookkeeping decay chains  Primary particles may not necessarily be particles which can be tracked by Geant4.  Geant4 provides some concrete implementations of G4VPrimaryGenerator.  G4ParticleGun  G4HEPEvtInterface, G4HEPMCInterface  G4GeneralParticleSource

8 Primary Particle - M.Asai (SLAC)8 Pre-assigned decay products  Physics generator can assign a decay channel for each individual particle separately, while in Geant4 you cannot specify a decay channel for each particle.  Decay chain can be “pre-assigned”.  A parent particle in the form of G4Track object travels in the detector, bringing “pre-assigned” decay daughters as objects of G4DynamicParticle.  When the parent track comes to the decay point, pre-assigned daughters become to secondary tracks, instead of randomly selecting a decay channel defined to the particle type. Decay time of the parent can be pre-assigned as well. D0D0 --  K-K- ++  B-B- G4PrimaryParticle B-B- G4Track D0D0 --  K-K- ++  pre-assigned decay products K-K- ++  D0D0 --  B-B- K-K- ++  D0D0

9 Built-in primary particle generators

10 Primary Particle - M.Asai (SLAC)10 G4ParticleGun  Concrete implementations of G4VPrimaryGenerator  A good example for experiment-specific primary generator implementation  It shoots one primary particle of a certain energy from a certain point at a certain time to a certain direction.  Various set methods are available  Intercoms commands are also available for setting initial values  One of most frequently asked questions is : I want “ particle shotgun ”, “ particle machinegun ”, etc.  Instead of implementing such a fancy weapon, in your implementation of UserPrimaryGeneratorAction, you can  Shoot random numbers in arbitrary distribution  Use set methods of G4ParticleGun  Use G4ParticleGun as many times as you want  Use any other primary generators as many times as you want to make overlapping events

11 Primary Particle - M.Asai (SLAC)11G4VUserPrimaryGeneratorAction void T01PrimaryGeneratorAction:: GeneratePrimaries(G4Event* anEvent) GeneratePrimaries(G4Event* anEvent) { G4ParticleDefinition* particle; G4int i = (int)(5.*G4UniformRand()); G4int i = (int)(5.*G4UniformRand()); switch(i) switch(i) { case 0: particle = positron; break;... } { case 0: particle = positron; break;... } particleGun->SetParticleDefinition(particle); particleGun->SetParticleDefinition(particle); G4double pp = G4double pp = momentum+(G4UniformRand()-0.5)*sigmaMomentum; momentum+(G4UniformRand()-0.5)*sigmaMomentum; G4double mass = particle->GetPDGMass(); G4double mass = particle->GetPDGMass(); G4double Ekin = sqrt(pp*pp+mass*mass)-mass; G4double Ekin = sqrt(pp*pp+mass*mass)-mass; particleGun->SetParticleEnergy(Ekin); particleGun->SetParticleEnergy(Ekin); G4double angle = (G4UniformRand()-0.5)*sigmaAngle; G4double angle = (G4UniformRand()-0.5)*sigmaAngle; particleGun->SetParticleMomentumDirection particleGun->SetParticleMomentumDirection (G4ThreeVector(sin(angle),0.,cos(angle))); (G4ThreeVector(sin(angle),0.,cos(angle))); particleGun->GeneratePrimaryVertex(anEvent); particleGun->GeneratePrimaryVertex(anEvent);}  You can repeat this for generating more than one primary particles.

12 Primary Particle - M.Asai (SLAC)12 Interfaces to HEPEvt and HepMC  Concrete implementations of G4VPrimaryGenerator  A good example for experiment-specific primary generator implementation  G4HEPEvtInterface  Suitable to /HEPEVT/ common block, which many of (FORTRAN) HEP physics generators are compliant to.  ASCII file input  G4HepMCInterface  An interface to HepMC class, which a few new (C++) HEP physics generators are compliant to.  ASCII file input or direct linking to a generator through HepMC.

13 Primary Particle - M.Asai (SLAC)13 G4GeneralParticleSource  A concrete implementation of G4VPrimaryGenerator  Suitable especially to space applications MyPrimaryGeneratorAction:: MyPrimaryGeneratorAction() MyPrimaryGeneratorAction() { generator = new G4GeneralParticleSource; } void MyPrimaryGeneratorAction:: GeneratePrimaries(G4Event* anEvent) GeneratePrimaries(G4Event* anEvent) { generator->GeneratePrimaryVertex(anEvent); }  Detailed description http://reat.space.qinetiq.com/gps/

14 Primary Particle - M.Asai (SLAC)14 G4GeneralParticleSource  Primary vertex can be randomly chosen on the surface of a certain volume.  Momentum direction and kinetic energy of the primary particle can also be randomized.  Distribution could be set by UI commands.  Capability of event biasing (variance reduction).  By enhancing particle type, distribution of vertex point, energy and/or direction Square plane, cosine-law direction, linear energy Spherical surface, isotropic radiation, black-body energy Cylindrical surface, cosine-law radiation, Cosmic diffuse energy Spherical volume with z biasing, isotropic radiation with theta and phi biasing, integral arbitrary point-wise energy distribution with linear interpolation.

15 Exotic primary particle

16 Primary Particle - M.Asai (SLAC)16 Importing “exotic” particles  “Exotic” particle means a type of particle that Geant4 physics processes do not know how to deal with and would never generate as a secondary.  It is thus not provided as a class in particle category of Geant4 distribution.  E.g. Higgs, W/Z boson, SUSY particle, r-hadron, monopole, black hole, etc.  “Exotic” particle also includes a type of particle that should not be seen outside of a hadron.  It is used inside Geant4 processes, but it should not be treated as a track.  E.g. quark, gluon.  Such exotic particle can be imported as a G4PrimaryParticle object.  It should have pre-assigned decay products (if it decays), since Geant4 does not know how it decays.  There are two kinds of exotic particles from the view point of Geant4. We have to deal them separately.  Particles that immediately decay without traveling finite distance.  Particles that travel a distance meaningful to Geant4 tracking.

17 Primary Particle - M.Asai (SLAC)17 Exotic particle that decays immediately  As a default, Geant4 ignores such exotic particle and takes its pre-assigned decay products as primaries.  Anyway, such a particle should not travel through your geometry.  In case you want to see it as a primary track (so that it has a unique track ID and it is recorded as a trajectory), use G4UnknownParticle.  G4UnknownParticle must be defined in your physics list with G4UnknownDecay process attached.  G4UnknownDecay process immediately enforces such particle to decay in its first step naively using pre-assigned decay products.  Once G4UnknownParticle is defined in your physics list, G4PrimaryTransformer converts whatever the exotic particle to a G4Track object of Unknown.  If you want to limit this conversion to be applied only to some kinds of exotic particle types, create your own PrimaryTransformer to override a method. G4ParticleDefinition* GetDefinition(G4PrimaryParticle*)  If non-null pointer is returned, this primary particle is converted into G4Track (or G4DynamicParticle for pre-assigned decay product).  If null is returned, its pre-assigned decay daughters will be treated as primaries.  Your PrimaryTransformer class must be assigned to G4RunManagerKernel.

18 Primary Particle - M.Asai (SLAC)18 Exotic particle that travels  As a default, Geant4 cannot deal with such a particle. Geant4 does not know what to do. You have to do the followings to import such exotic particle.  Implement ParticleDefinition concrete class to represent (a family of) exotic particle(s).  Typically one concrete class for each category and each charge state.  MyRHadronZero, MyRHadronPlus, etc.  BMesonStarPlus, BMesonStarMinus, etc.  PDG code in ParticleDefinition object for such exotic particle must be 0, and the mass could be arbitrary value. G4DynamicParticle::GetPDGcode() and G4DynamicParticle::GetMass() will return correct values for each individual track.  Assign reasonable processes to it.  G4Transportation, G4Decay (don’t use G4UnknownDecay), EM processes, hadronic processes(?)  create your own PrimaryTransformer to override a method. G4ParticleDefinition* GetDefinition(G4PrimaryParticle*)  By this method, return proper ParticleDefinition object.


Download ppt "Primary Particle Makoto Asai (SLAC) Geant4 Tutorial Course Geant4 v8.2p01."

Similar presentations


Ads by Google