|Message: Re: Randomising primary particle based on a different code||Not Logged In (login)|
Click on the Forum title, e.g. on the "Forums by Category" page, to read a sequence of postings to the Forum and its threads all in one page. If you are only interested in one thread or the thread following a specific posting, click the thread or the posting, which takes you to a smaller page, which contains only the part you are interested in and may be easier to navigate.
Messages are "chained" if there are only replies at the first level, i.e. 1/1.html, 1/1/1.html etc. In case of "chained" messages the message number is replaced by the icon and there is no indentation.
Inline: Display the subject line only or also the text of the posting(s); for the choice "All" the "Outline" choices are switched off.
|1||0||1||no text / full text of posting|
|2||1||All||text for level 1 only / text for All postings|
Outline: Choose the depth of the posting thread, successive toggle controls provide increasing detail.
|1||2||1||2 levels / 1 level (original posting)|
|2||3||2||3 levels / 2 levels|
|3||3||All||3 levels / all levels (all postings)|
> > But I > > would like the distribution of my primary particles based on a C++ > > program I wrote. The anti-protons will have a free fall based on random > > velocities and will thus have a random distribution on the target. I am > > attaching a file showing this distribution. How can I incorporate this > > distribution in my PrimaryGeneratorAction. Is there a way to add my C++ > > code that generates this distribution into the Geant4 code?
You write a PrimaryGeneratorAction that utilizes G4ParticleGun:
fParticleGun = new G4ParticleGun();
(G4ParticleGun* fParticleGun is a member of your PrimaryGeneratorAction)
fParticleGun -> SetParticleDefinition(particle);
where particle is:
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4ParticleDefinition* particle = particleTable -> FindParticle("anti_proton");
You then add your C++ code as a method of PrimaryGeneratorAction. You modify your code such that when the position has been calculated, you call:
fParticleGun -> SetParticlePosition(G4ThreeVector( x , y , z ) );
with the direction, you do:
fParticleGun -> SetParticleMomentumDirection( G4ThreeVector(momentumX,momentumY,momentumZ) );
with the energy (from your velocity magnitude):
fParticleGun -> SetParticleEnergy ( kineticEnergy );
You call your new method from GeneratePrimaries(G4Event* anEvent)
Many of the Geant4 examples in our distribution do just that and a little reading of the G4 Manual will help!