|Message: Re: GPS Cylindrical surface source : how to generate particules towards the outside of the cylinder?||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)|
On Thu, 21 Mar 2013 00:47:36 GMT, Gumplinger Peter wrote:
> You can always code your source in C++ in > PrimaryGeneratorAction::GeneratePrimaries. Calculate a random position > on your cylinder then call particleGun->SetParticlePosition. Next > calculate a direction you want always away from the cylinder surface and > call particleGun->SetParticleMomentumDirection.
You can do this directly with the G4 geometry as well. If it's part of your detector model, get the volume pointer and dig down to access the associated G4VSolid*. If you want to use an "arbitrary" cylinder, then you can instantiate your own private G4Tubs in your generator action.
Either way, this is the code:
G4VSolid* mycyl = (whatever); // See above for filling the pointer G4ThreeVector gunpoint = mycyl->GetPointOnSurface(); G4ThreeVector gundir = mycyl->SurfaceNormal(gunpoint); particleGun->SetParticlePosition(gunpoint); particleGun->SetParticleMomentumDirection(gundir);
I assume you configure the particle type and energy/momentum separately.
-- Michael Kelsey