61void PrimaryGeneratorAction::GeneratePrimaries(G4Event* event) {
67 if (event->GetUserInformation()) {
70 "There was a UserEventInformation attached before beginning event."
71 "\nI don't know how this happend!!");
77 event->SetUserInformation(event_info);
79 PrimaryGenerator::Factory::get().apply([event](
const auto& generator) {
80 generator->GeneratePrimaryVertex(event);
84 int n_pv =
event->GetNumberOfPrimaryVertex();
87 for (
int i_pv = 0; i_pv < n_pv; ++i_pv) {
88 G4PrimaryVertex* primary_vertex =
event->GetPrimaryVertex(i_pv);
90 if (not primary_vertex) {
93 "One of the primary generators created a NULL primary vertex.");
98 for (
int iparticle = 0; iparticle < primary_vertex->GetNumberOfParticle();
100 G4PrimaryParticle* primary = primary_vertex->GetPrimary(iparticle);
105 "One of the primary generators created a NULL primary particle.");
109 primary->GetUserInformation())};
110 if (not primary_info) {
114 primary->SetUserInformation(primary_info);
117 int hep_status = primary_info->getHepEvtStatus();
118 if (hep_status <= 0) {
120 primary_info->setHepEvtStatus(1);
126 event_info->incWeight(primary_vertex->GetWeight());
130 double x0_i = primary_vertex->GetX0();
131 double y0_i = primary_vertex->GetY0();
132 double z0_i = primary_vertex->GetZ0();
140 double x0_f = beamspot_x_size_ * (G4UniformRand() - 0.5) + x0_i;
141 double y0_f = beamspot_y_size_ * (G4UniformRand() - 0.5) + y0_i;
142 double z0_f = beamspot_z_size_ * (G4UniformRand() - 0.5) + z0_i;
143 primary_vertex->SetPosition(x0_f, y0_f, z0_f);
148 if (time_shift_primaries_) {
149 primary_vertex->SetT0(primary_vertex->GetT0() +
150 primary_vertex->GetZ0() / 299.702547);
157 "No primary vertices were produced by any of the generators.");