50 lines
1.6 KiB
C++
50 lines
1.6 KiB
C++
#include "EmitterPrimary.hh"
|
|
|
|
#include "G4Box.hh"
|
|
#include "G4LogicalVolume.hh"
|
|
#include "G4LogicalVolumeStore.hh"
|
|
#include "G4ParticleDefinition.hh"
|
|
#include "G4ParticleGun.hh"
|
|
#include "G4ParticleTable.hh"
|
|
#include "G4RunManager.hh"
|
|
#include "G4SystemOfUnits.hh"
|
|
#include "Randomize.hh"
|
|
|
|
EmitterPrimary::EmitterPrimary()
|
|
: G4VUserPrimaryGeneratorAction(), fParticleGun(nullptr) {
|
|
// Creiamo il ParticleGun impostandolo per sparare 1 particella alla volta
|
|
G4int n_particle = 1;
|
|
fParticleGun = new G4ParticleGun(n_particle);
|
|
|
|
// Otteniamo la tabella delle particelle di Geant4
|
|
G4ParticleTable *particleTable = G4ParticleTable::GetParticleTable();
|
|
|
|
// Cerchiamo il muone negativo (usa "mu+" per l'antimuone)
|
|
G4String particleName = "mu-";
|
|
G4ParticleDefinition *particle = particleTable->FindParticle(particleName);
|
|
|
|
// Configuriamo le proprietà iniziali della particella
|
|
fParticleGun->SetParticleDefinition(particle);
|
|
|
|
// Impostiamo la direzione della quantità di moto (es. lungo l'asse Z)
|
|
fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0., 0., -1.));
|
|
|
|
// Impostiamo l'energia cinetica a 1 GeV
|
|
fParticleGun->SetParticleEnergy(1.0 * GeV);
|
|
|
|
// Impostiamo la posizione di partenza (origine)
|
|
fParticleGun->SetParticlePosition(G4ThreeVector(0., 0., 10. * m));
|
|
}
|
|
|
|
EmitterPrimary::~EmitterPrimary() {
|
|
// Importante: liberare la memoria
|
|
delete fParticleGun;
|
|
}
|
|
|
|
void EmitterPrimary::GeneratePrimaries(G4Event *anEvent) {
|
|
// Questo metodo viene invocato all'inizio di ogni evento.
|
|
// Qui potresti anche aggiungere una randomizzazione della posizione o
|
|
// dell'energia.
|
|
|
|
fParticleGun->GeneratePrimaryVertex(anEvent);
|
|
} |