Estructura del programa main
Descripción
El programa main mas simple posible tiene la estructura:
```
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;
}
```
en donde:
> se inicializa el control
> se crea la geometría
> se crean las partículas
> se crea el generador de partículas
> se dispara una partícula
> se cierra el programa
ID:(9412, 0)
Creación de la geometría
Descripción
El mínimo para crear la geometría es un volumen, lo que se puede hacer mediante
```
Class MyGeometry : public G4VUserDetectorConstruction{
G4VPhysicalVolume* Construct();
}
```
lo que se hereda de G4VUserDetectorConstruction.
El volumen incluirá todos los restantes volúmenes del modelo y se denomina el 'mundo' o 'world'.
ID:(9411, 0)
Creación de partículas
Descripción
La forma mas fácil para crear las partículas es usar la lista por defecto que trae Gean4 lo que se hace mediante
```
G4VUserPhysicsList* physics = new FTFP_BERT();
runManager->SetUserInitialization(physics);
```
lo que se hereda de G4VUserPhysicsList.
La otra alternativa es la creación a medida del usaurio que debe de incluir el cosntructor de particulas (ConstructParticle()), de procesos (ConstructProcess()) y los cortes (SetCuts()) mediante:
```
class MyPhysics : public G4VUserPhysicsList{
void ConstructParticle();
void ConstructProcess();
void SetCuts();
}
```
ID:(9413, 0)
Gun de partículas
Descripción
Para generar las partículas se crea un generador con
```
class myGenerator : public G4VUserPrimaryGeneratorAction{
void GeneratePrimaries(G4Event*);
}
```
que se hereda de G4VUserPrimaryGeneratorAction y debe implementar GeneratePrimaries(G4Event*).
Las partículas pueden ser generadas por G4ParticleGun sobre el que se pueden definir los parámetros claves por ejemplo como:
```
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)