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) Royal Holloway,
3University of London 2001 - 2024.
4
5This file is part of BDSIM.
6
7BDSIM is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published
9by the Free Software Foundation version 3 of the License.
10
11BDSIM is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
18*/
19#ifndef BDSBUNCHGAUSSBASE_H
20#define BDSBUNCHGAUSSBASE_H
21
22#include "BDSBunch.hh"
23
24#include "globals.hh"
25#include "G4Transform3D.hh"
26
27#include "CLHEP/Matrix/SymMatrix.h"
28#include "CLHEP/Matrix/Vector.h"
29
30#include <vector>
31
32namespace CLHEP
33{
34 class HepRandomEngine;
35 class RandMultiGauss;
36}
37
38namespace GMAD
39{
40 class Beam;
41}
42
50{
51public:
52 BDSBunchGaussBase() = delete;
53 explicit BDSBunchGaussBase(const G4String& nameIn);
54 virtual ~BDSBunchGaussBase();
55
56 virtual void SetOptions(const BDSParticleDefinition* beamParticle,
57 const GMAD::Beam& beam,
58 const BDSBunchType& distrType,
59 G4Transform3D beamlineTransformIn = G4Transform3D::Identity,
60 const G4double beamlineS = 0);
61
64 virtual void BeginOfRunAction(G4int numberOfEvents,
65 G4bool batchMode);
66
70
71 inline G4bool OffsetSampleMean() const {return offsetSampleMean;}
72
73protected:
76 CLHEP::RandMultiGauss* CreateMultiGauss(CLHEP::HepRandomEngine& anEngine,
77 const CLHEP::HepVector& mu,
78 CLHEP::HepSymMatrix& sigma);
79
81 void PreGenerateEvents(G4int nGenerate);
82
85
86 CLHEP::HepVector meansGM;
87 CLHEP::HepSymMatrix sigmaGM;
88
90 CLHEP::RandMultiGauss* gaussMultiGen;
91
93
95 std::vector<G4double> x0_v, xp_v, y0_v, yp_v, z0_v, zp_v,E_v,t_v,weight_v;
98
100 std::vector<std::vector<G4double>* > coordinates;
101};
102
103#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:47
G4double beamlineS
Beamline initial S position.
Definition BDSBunch.hh:219
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:37
Beam class.
Definition beam.h:44
Parser namespace for GMAD language. Combination of Geant4 and MAD.