
Struktur des Hauptprogramms
Beschreibung 
Das einfachste Hauptprogramm main hat die Struktur:
```
int main(int argc, char** argv){
G4RunManager* runManager = new G4RunManager;
MyGeometry* geom = new MyGeometry();
runManager->SetUserInitialization(geom);
MyPhysicsList* physics = new MyPhysicsList();
runManager->SetUserInitialization(physics);
MyPrimaryGeneratorAction* generator = new MyPrimaryGeneratorAction();
runManager->SetUserAction(generator);
runManager->Initialize();
runManager->BeamOn(1);
delete runManager;
return 0;
}
```
wo:
> Steuerung ist initialisiert
> Geometrie wird erstellt
> Die Partikel werden erzeugt
> Der Partikelgenerator wird erstellt
> Ein Teilchen wird gefeuert
> Das Programm wird abgeschlossen
ID:(9412, 0)

Erstellung von Geometrie
Beschreibung 
Das Minimum, um die Geometrie zu erstellen, ist ein Volumen, das erzeugt werden kann durch
```
Class MyGeometry : public G4VUserDetectorConstruction{
G4VPhysicalVolume* Construct();
}
```
was von G4VUserDetectorConstruction geerbt wird.
Der Volumen wird alle anderen Volumen des Modells enthalten und heißt 'Welt' oder 'world'.
ID:(9411, 0)

Erzeugung von Partikeln
Beschreibung 
Die einfachste Methode zum Erstellen der Partikel besteht darin, die Standardliste zu verwenden, die Gean4 mitbringt
```
G4VUserPhysicsList* physics = new FTFP_BERT();
runManager->SetUserInitialization(physics);
```
was wird von G4VUserPhysicsList geerbt.
Die andere Alternative ist die Erstellung durch den Benutzers, der Partikelkonstruktor (ConstructParticle ()), Prozesse (ConstructProcess ()) und Schnitte (SetCuts ()) enthalten muss durch:
```
class MyPhysics : public G4VUserPhysicsList{
void ConstructParticle();
void ConstructProcess();
void SetCuts();
}
```
ID:(9413, 0)

Schuss von Partikeln
Beschreibung 
Um die Teilchen zu erzeugen, wird ein Generator mit erzeugt
```
class myGenerator : public G4VUserPrimaryGeneratorAction{
void GeneratePrimaries(G4Event*);
}
```
was von G4VUserPrimaryGeneratorAction vererbt wird und muss GeneratePrimaries(G4Event*) umsetzen.
Die Partikel können von G4ParticleGun erzeugt werden, auf dem Schlüsselparameter definiert werden können:
```
G4ParticleGun* myGun = new G4ParticleGun(int n_particle = 1);
myGun->SetMomentumDirection(G4ThreeVector(1,0,0));
myGun->SetKineticEnergy(50.*MeV);
myGun->GeneratePrimaryVertex(G4Event* anEvent);
```
ID:(9414, 0)