BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
BDSBunchGaussBase.hh
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) BDSIM Collaboration, 2001 - 2026.
3
4This file is part of BDSIM.
5
6BDSIM is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published
8by the Free Software Foundation version 3 of the License.
9
10BDSIM is distributed in the hope that it will be useful, but
11WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
17*/
18#ifndef BDSBUNCHGAUSSBASE_H
19#define BDSBUNCHGAUSSBASE_H
20
21#include "BDSBunch.hh"
22
23#include "globals.hh"
24#include "G4Transform3D.hh"
25
26#include "CLHEP/Matrix/SymMatrix.h"
27#include "CLHEP/Matrix/Vector.h"
28
29#include <vector>
30
31namespace CLHEP
32{
33 class HepRandomEngine;
34 class RandMultiGauss;
35}
36
37namespace GMAD
38{
39 class Beam;
40}
41
49{
50public:
51 BDSBunchGaussBase() = delete;
52 explicit BDSBunchGaussBase(const G4String& nameIn);
53 virtual ~BDSBunchGaussBase();
54
55 virtual void SetOptions(const BDSParticleDefinition* beamParticle,
56 const GMAD::Beam& beam,
57 const BDSBunchType& distrType,
58 G4Transform3D beamlineTransformIn = G4Transform3D::Identity,
59 const G4double beamlineS = 0);
60
63 virtual void BeginOfRunAction(G4int numberOfEvents,
64 G4bool batchMode);
65
69
70 inline G4bool OffsetSampleMean() const {return offsetSampleMean;}
71
72protected:
75 CLHEP::RandMultiGauss* CreateMultiGauss(CLHEP::HepRandomEngine& anEngine,
76 const CLHEP::HepVector& mu,
77 CLHEP::HepSymMatrix& sigma);
78
80 void PreGenerateEvents(G4int nGenerate);
81
84
85 CLHEP::HepVector meansGM;
86 CLHEP::HepSymMatrix sigmaGM;
87
89 CLHEP::RandMultiGauss* gaussMultiGen;
90
92
94 std::vector<G4double> x0_v, xp_v, y0_v, yp_v, z0_v, zp_v,E_v,t_v,weight_v;
97
99 std::vector<std::vector<G4double>* > coordinates;
100};
101
102#endif
Common functionality for a 6D Gaussian distribution.
std::vector< G4double > z0_v
Holder for pre-calculated coordinates.
virtual BDSParticleCoordsFull GetNextParticleLocal()
G4bool offsetSampleMean
Whether to offset the sample mean.
std::vector< G4double > yp_v
Holder for pre-calculated coordinates.
virtual void SetOptions(const BDSParticleDefinition *beamParticle, const GMAD::Beam &beam, const BDSBunchType &distrType, G4Transform3D beamlineTransformIn=G4Transform3D::Identity, const G4double beamlineS=0)
void PreGenerateEvents(G4int nGenerate)
Pre-generate all the particle coordinates and subtract the sample mean.
std::vector< G4double > y0_v
Holder for pre-calculated coordinates.
std::vector< G4double > zp_v
Holder for pre-calculated coordinates.
G4int iPartIteration
Iterator for reading out pre-calculate coordinates.
std::vector< G4double > t_v
Holder for pre-calculated coordinates.
CLHEP::RandMultiGauss * gaussMultiGen
Randon number generator with sigma matrix and mean.
std::vector< G4double > weight_v
Holder for pre-calculated coordinates.
CLHEP::RandMultiGauss * CreateMultiGauss(CLHEP::HepRandomEngine &anEngine, const CLHEP::HepVector &mu, CLHEP::HepSymMatrix &sigma)
std::vector< G4double > E_v
Holder for pre-calculated coordinates.
std::vector< G4double > xp_v
Holder for pre-calculated coordinates.
std::vector< G4double > x0_v
Holder for pre-calculated coordinates.
std::vector< std::vector< G4double > * > coordinates
Convenience vector of vectors for clearing up.
virtual void BeginOfRunAction(G4int numberOfEvents, G4bool batchMode)
virtual BDSParticleCoordsFull GetNextParticleLocalCoords()
Fire random number generator and get coordinates. Can be overloaded if required.
The base class for bunch distribution generators.
Definition BDSBunch.hh:46
G4double beamlineS
Beamline initial S position.
Definition BDSBunch.hh:218
A set of particle coordinates including energy and weight.
Wrapper for particle definition.
Improve type-safety of native enum data type in C++.
Beam loader.
Definition Beam.hh:36
Beam class.
Definition beam.h:43
Parser namespace for GMAD language. Combination of Geant4 and MAD.