# How to rotate a source efficiently in two dimensions?

I would like to rotate a particle gun by 360° in 1° steps around a fixed center point in two dimensions. I’ve sketched my goal:

The particle gun itself has to be rotated itself accordingly. So not only the absolute position needs to describe a circular movement but the particle gun should also point towards the center all the time.
Is there a smart and/or convenient way to realize this?

I’ve seen How to rotate a source in a macro file? but when I understood correctly it is limited to change by 180° only and the discussion is also more about histograms(…?).

Got the absolute positioning working by:

``````double R = whatever_value;
double x, y = 0;
double angle = 0;

for(int i=0; i<360; i++){
angle = i;
angle = 2*3.14159265358979311600*(angle * 0.00277777777);

x = R*cos(angle);
y = R*sin(angle);

G4ThreeVector pos3(x*cm, y*cm, 0*m);
}
``````

The facing towards the center is probably now straight forward.

Geant4 does have constants for things like `pi`.

``````#include "G4PhysicalConstants.hh"
``````

And it has units, so you can write, e.g., `angle = i*deg;`.

``````#include "G4SystemOfUnits.hh"
``````
1 Like