File indexing completed on 2025-11-04 09:27:31
0001 
0002 
0003 
0004 
0005 
0006 
0007 
0008 
0009 
0010 
0011 
0012 
0013 
0014 
0015 
0016 
0017 
0018 
0019 
0020 
0021 
0022 
0023 
0024 
0025 
0026 
0027 
0028 
0029 
0030 
0031 
0032 
0033 
0034 
0035 
0036 
0037 
0038 
0039 
0040 
0041 
0042 
0043 #include "G4SystemOfUnits.hh"
0044 #include "G4ParticleTable.hh"
0045 #include "G4ParticleGun.hh"
0046 #include "G4GeneralParticleSource.hh"
0047 #include "G4HEPEvtInterface.hh"
0048 #include "G4Version.hh"
0049 #include "G4GenericMessenger.hh"
0050 
0051 #include "PrimaryGeneratorAction.hh"
0052 
0053 #include <cstring>
0054 
0055 PrimaryGeneratorAction::PrimaryGeneratorAction()
0056 {
0057   DefineCommands();
0058   G4int n_particle            = 1;
0059   G4ParticleGun* fParticleGun = new G4ParticleGun(n_particle);
0060   G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
0061   G4String particleName;
0062   G4ParticleDefinition* particle =
0063     particleTable->FindParticle(particleName = "mu+");
0064   fParticleGun->SetParticleDefinition(particle);
0065   fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0., 0., 1.));
0066   fParticleGun->SetParticleEnergy(10. * CLHEP::GeV);
0067   fParticleGun->SetParticlePosition(G4ThreeVector(0., 0., 0.));
0068   gentypeMap["particleGun"] = fParticleGun;
0069   gentypeMap["GPS"]         = new G4GeneralParticleSource;
0070   fcurrentGenerator         = gentypeMap["particleGun"];
0071   fcurrentGeneratorName     = "particleGun";
0072 }
0073 
0074 PrimaryGeneratorAction::~PrimaryGeneratorAction()
0075 {
0076   delete fMessenger;
0077   for( auto& gentype : gentypeMap )
0078   {
0079     delete gentype.second;
0080   }
0081 }
0082 
0083 void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
0084 {
0085   fcurrentGenerator->GeneratePrimaryVertex(anEvent);
0086 }
0087 
0088 void PrimaryGeneratorAction::DefineCommands()
0089 {
0090   fMessenger = new G4GenericMessenger(this, "/CaTS/primaryGenerator/",
0091                                       "select primary Generator");
0092   
0093   fMessenger
0094     ->DeclareMethod("setGenerator", &PrimaryGeneratorAction::SetGenerator)
0095     .SetGuidance("Select the primary Generator (Available generators : "
0096                  "particleGun,GPS")
0097     .SetParameterName("generator", true)
0098     .SetDefaultValue("particleGun")
0099     .SetCandidates("particleGun GPS");
0100   fMessenger->DeclareMethod("Print", &PrimaryGeneratorAction::Print)
0101     .SetGuidance("Print name of primary generator")
0102     .SetStates(G4State_PreInit, G4State_Idle);
0103 }