59void PrimaryGeneratorAction::GeneratePrimaries(G4Event* event) {
65 if (event->GetUserInformation()) {
68 "There was a UserEventInformation attached before beginning event."
69 "\nI don't know how this happend!!");
75 event->SetUserInformation(event_info);
77 PrimaryGenerator::Factory::get().apply([event](
const auto& generator) {
78 generator->GeneratePrimaryVertex(event);
82 int nPV =
event->GetNumberOfPrimaryVertex();
85 for (
int iPV = 0; iPV < nPV; ++iPV) {
86 G4PrimaryVertex* primary_vertex =
event->GetPrimaryVertex(iPV);
88 if (not primary_vertex) {
91 "One of the primary generators created a NULL primary vertex.");
96 for (
int iparticle = 0; iparticle < primary_vertex->GetNumberOfParticle();
98 G4PrimaryParticle* primary = primary_vertex->GetPrimary(iparticle);
103 "One of the primary generators created a NULL primary particle.");
107 primary->GetUserInformation())};
108 if (not primary_info) {
112 primary->SetUserInformation(primary_info);
115 int hepStatus = primary_info->getHepEvtStatus();
116 if (hepStatus <= 0) {
118 primary_info->setHepEvtStatus(1);
124 event_info->incWeight(primary_vertex->GetWeight());
128 double x0_i = primary_vertex->GetX0();
129 double y0_i = primary_vertex->GetY0();
130 double z0_i = primary_vertex->GetZ0();
138 double x0_f = beamspotXSize_ * (G4UniformRand() - 0.5) + x0_i;
139 double y0_f = beamspotYSize_ * (G4UniformRand() - 0.5) + y0_i;
140 double z0_f = beamspotZSize_ * (G4UniformRand() - 0.5) + z0_i;
141 primary_vertex->SetPosition(x0_f, y0_f, z0_f);
146 if (time_shift_primaries_) {
147 primary_vertex->SetT0(primary_vertex->GetT0() +
148 primary_vertex->GetZ0() / 299.702547);
155 "No primary vertices were produced by any of the generators.");