BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
BDSBunchGaussMatrix.cc
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#include "BDSBunchGaussMatrix.hh"
19#include "BDSDebug.hh"
20#include "BDSUtilities.hh"
21
22#include "parser/beam.h"
23
24#include "Randomize.hh"
25#include "CLHEP/RandomObjects/RandMultiGauss.h"
26
27BDSBunchGaussMatrix::BDSBunchGaussMatrix():
28 BDSBunchGaussBase("gaussmatrix")
29{;}
30
32 const GMAD::Beam& beam,
33 const BDSBunchType& distrType,
34 G4Transform3D beamlineTransformIn,
35 const G4double beamlineSIn)
36{
37 BDSBunchGaussBase::SetOptions(beamParticle, beam, distrType, beamlineTransformIn, beamlineSIn);
38
39 sigmaGM[0][0] = beam.sigma11;
40 sigmaGM[0][1] = beam.sigma12;
41 sigmaGM[0][2] = beam.sigma13;
42 sigmaGM[0][3] = beam.sigma14;
43 sigmaGM[0][4] = beam.sigma15;
44 sigmaGM[0][5] = beam.sigma16;
45 sigmaGM[1][1] = beam.sigma22;
46 sigmaGM[1][2] = beam.sigma23;
47 sigmaGM[1][3] = beam.sigma24;
48 sigmaGM[1][4] = beam.sigma25;
49 sigmaGM[1][5] = beam.sigma26;
50 sigmaGM[2][2] = beam.sigma33;
51 sigmaGM[2][3] = beam.sigma34;
52 sigmaGM[2][4] = beam.sigma35;
53 sigmaGM[2][5] = beam.sigma36;
54 sigmaGM[3][3] = beam.sigma44;
55 sigmaGM[3][4] = beam.sigma45;
56 sigmaGM[3][5] = beam.sigma46;
57 sigmaGM[4][4] = beam.sigma55;
58 sigmaGM[4][5] = beam.sigma56;
59 sigmaGM[5][5] = beam.sigma66;
60 if (BDS::IsFinite(beam.sigma55, 1e-50))
61 {finiteSigmaT = true;}
62 if (BDS::IsFinite(beam.sigma66))
63 {finiteSigmaE = true;}
64
65 delete gaussMultiGen;
66 gaussMultiGen = CreateMultiGauss(*CLHEP::HepRandom::getTheEngine(), meansGM, sigmaGM);
67}
Common functionality for a 6D Gaussian distribution.
virtual void SetOptions(const BDSParticleDefinition *beamParticle, const GMAD::Beam &beam, const BDSBunchType &distrType, G4Transform3D beamlineTransformIn=G4Transform3D::Identity, const G4double beamlineS=0)
CLHEP::RandMultiGauss * gaussMultiGen
Randon number generator with sigma matrix and mean.
CLHEP::RandMultiGauss * CreateMultiGauss(CLHEP::HepRandomEngine &anEngine, const CLHEP::HepVector &mu, CLHEP::HepSymMatrix &sigma)
virtual void SetOptions(const BDSParticleDefinition *beamParticle, const GMAD::Beam &beam, const BDSBunchType &distrType, G4Transform3D beamlineTransformIn=G4Transform3D::Identity, const G4double beamlineS=0)
G4bool finiteSigmaE
Flags to ignore random number generator in case of no finite E or T.
Definition BDSBunch.hh:206
G4bool finiteSigmaT
Flags to ignore random number generator in case of no finite E or T.
Definition BDSBunch.hh:207
Wrapper for particle definition.
Improve type-safety of native enum data type in C++.
double sigma45
for the gaussian sigma matrix distribution
Definition beamBase.h:108
double sigma16
for the gaussian sigma matrix distribution
Definition beamBase.h:105
double sigma66
for the gaussian sigma matrix distribution
Definition beamBase.h:110
double sigma35
for the gaussian sigma matrix distribution
Definition beamBase.h:107
double sigma44
for the gaussian sigma matrix distribution
Definition beamBase.h:108
double sigma13
for the gaussian sigma matrix distribution
Definition beamBase.h:105
double sigma34
for the gaussian sigma matrix distribution
Definition beamBase.h:107
double sigma12
for the gaussian sigma matrix distribution
Definition beamBase.h:105
double sigma26
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma25
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma36
for the gaussian sigma matrix distribution
Definition beamBase.h:107
double sigma46
for the gaussian sigma matrix distribution
Definition beamBase.h:108
double sigma14
for the gaussian sigma matrix distribution
Definition beamBase.h:105
double sigma23
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma11
for the gaussian sigma matrix distribution
Definition beamBase.h:105
double sigma22
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma33
for the gaussian sigma matrix distribution
Definition beamBase.h:107
double sigma15
for the gaussian sigma matrix distribution
Definition beamBase.h:105
double sigma55
for the gaussian sigma matrix distribution
Definition beamBase.h:109
double sigma56
for the gaussian sigma matrix distribution
Definition beamBase.h:109
double sigma24
for the gaussian sigma matrix distribution
Definition beamBase.h:106
Beam class.
Definition beam.h:43
G4bool IsFinite(G4double value, G4double tolerance=std::numeric_limits< double >::epsilon())